1 回答

TA貢獻1845條經驗 獲得超8個贊
如果您要傳遞給 的調用,您會注意到在該模式下,Go 工具鏈中的鏈接器會調用外部 C 鏈接器;例如,在GNU/Linux與Go 1.15.x上,我有:-x
go build -buildmode=c-shared ...
mkdir -p $WORK/b001/exe/
cd $WORK/b001/exe/
/home/username/devel/golang-1.15.6/pkg/tool/linux_amd64/link -o cshared.dll -importcfg $WORK/b001/importcfg.link -buildmode=c-shared -buildid=OJVN3iT0GI_DEAMVbLDu/o9eT_YGfUiRe07beNQAA/-xRRfDcM8nVc03rltdqz/OJVN3iT0GI_DEAMVbLDu -extld=gcc $WORK/b001/_pkg_.a
# command-line-arguments
loadinternal: cannot find runtime/cgo
/home/username/devel/golang-1.15.6/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
gcc: error: unrecognized command line option ‘-mconsole’; did you mean ‘--compile’?
請注意,與 一起調用,從 go doc cmd/link
中,我們收集pkg/tool/linux_amd64/link
-extld=gcc
-extld 鏈接器
設置外部鏈接器(默認為“clang”或“gcc”)。
我的猜測是,為了生成一個兼容C的動態庫,Go工具鏈依賴于一個外部的C鏈接器,這是由cgo
機制執行的 - 在-buildmode=c-shared
的文檔中實際上有一個提示:
-buildmode=c-shared
將列出的主包及其導入的所有包
構建到 C 共享庫中。唯一可調用的符號
是使用注釋導出的那些函數。
只需要列出一個主包。cgo
//export
因此,我的猜測是,為了做你想做的事情,你必須:
安裝支持 Windows/i386 的交叉編譯器 — 你可以從這里開始。
按照
cgo
文檔中的說明在調用之前設置環境,以便 Go 工具鏈調用特定于 Windows 的鏈接器。go build
通過使用命令行選項運行來驗證它是否正常工作。
go build
-x
- 1 回答
- 0 關注
- 225 瀏覽
添加回答
舉報