亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Linux for Windows 下交叉編譯共享庫

在 Linux for Windows 下交叉編譯共享庫

Go
HUX布斯 2022-08-01 17:32:43
我想得到一個windows-DLL,但我想在Ubuntu-Linux下編譯它。構建可執行文件很簡單:生成一個 ,其行為符合預期。env GOOS=windows GOARCH=386 go build wrapper.gowrapper.exe但是構建 DLL 會導致錯誤:env GOOS=windows GOARCH=386 go build -buildmode=c-shared wrapper.gorunning gcc failed: exit status 1gcc: error: unrecognized command line option ‘-mconsole’; did you mean ‘--compile’?我寧愿不在Windows下安裝和運行,因為我的完整工具鏈在Ubuntu下運行。gogo version go1.15.6 linux/amd64
查看完整描述

1 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

如果您要傳遞給 的調用,您會注意到在該模式下,Go 工具鏈中的鏈接器會調用外部 C 鏈接器;例如,在GNU/Linux與Go 1.15.x上,我有:-xgo 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


查看完整回答
反對 回復 2022-08-01
  • 1 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號