2011-12-12 119 views
1

我使用自定義構建工具來編譯去項目,我需要一種方法來在我的項目中使用cgo。如何在不使用make的情況下使用cgo?

問題是,cgo文檔只告訴你如何使用make。

我真正需要知道的是哪些生成的文件需要使用哪些工具進行處理以及按照何種順序進行處理。我嘗試閱讀源代碼目錄中的make.pkg,但是我的最大努力失敗了。

我的測試dll非常簡單,每次調用它時都會返回1的單個函數,並且使用此函數的代碼同樣很簡單。

在cgo項目上成功運行make所產生的控制檯輸出將非常有用。

回答

2

輸出:

# gomake _obj/life.a 
CGOPKGPATH= cgo -- life.go 
touch _obj/_cgo_run 
8g -o _go_.8 _obj/life.cgo1.go _obj/_cgo_gotypes.go 
8c -FVw -I ${GOROOT}/pkg/linux_386 -I . -o "_cgo_defun.8" _obj/_cgo_defun.c 
gcc -m32 -I . -g -fPIC -O2 -o _cgo_main.o -c _obj/_cgo_main.c 
gcc -m32 -g -fPIC -O2 -o c-life.o -c c-life.c 
gcc -m32 -I . -g -fPIC -O2 -o life.cgo2.o -c _obj/life.cgo2.c 
gcc -m32 -I . -g -fPIC -O2 -o _cgo_export.o -c _obj/_cgo_export.c 
gcc -m32 -g -fPIC -O2 -o _cgo1_.o _cgo_main.o c-life.o life.cgo2.o _cgo_export.o 
cgo -dynimport _cgo1_.o >_obj/_cgo_import.c_ && mv -f _obj/_cgo_import.c_ _obj/_cgo_import.c 
8c -FVw -I . -o "_cgo_import.8" _obj/_cgo_import.c 
rm -f _obj/life.a 
gopack grc _obj/life.a _go_.8 _cgo_defun.8 _cgo_import.8 c-life.o life.cgo2.o _cgo_export.o 

cgo -- life.go創建下列文件:

_obj/_cgo_.o 
_obj/life.cgo1.go 
_obj/life.cgo2.c 
_obj/_cgo_gotypes.go 
_obj/_cgo_defun.c 
_obj/_cgo_main.c 
_obj/_cgo_flags 
_obj/_cgo_export.c 
_cgo_export.h 
+0

謝謝,非常有幫助 –

1

我使用一個自定義生成工具編譯去項目,我需要一種方法在我的項目中使用CGO。

...而這種做法導致的問題。使用Makefile的標準方式很簡單,容易,經過驗證,記錄等。

我知道我不是(直接)回答你的問題。相反,我的「答案」是:我強烈建議使用標準方式。不要通過選擇其他而不是直接支持的選項來爲自己創造問題。

這就是說,我認爲有一種方法可以避免Makefiles,我從來沒有去過那裏,對不起。我通常懶惰/時間不夠,所以我用最簡單/最快的方式完成任務。你可能會想嘗試在目錄misc/cgo/life在32位Linux上運行make相同;-)

+0

的化妝文件不適合我。它引用了windows上不可用的各種unix/linux特定命令。我試圖修改make文件的工作,但我沒有太多的運氣。 –

+0

我想補充一點,在cgo項目上運行make的控制檯輸出是非常寶貴的。這至少會給我一個巨大的提升,用於逆向工程所需的步驟 –

+1

「Go 1發佈將包含一個新工具'go',它將取代goinstall和make。」從[Go 1 Preview](https://docs.google.com/document/pub?id=1ny8uI-_BHrDCZv_zNBSthNKAMX_fR_0dc6epA6lztRE) – Mostafa

相關問題