簡體   English   中英

golang with cgo 拋出錯誤 collect2: error: ld returns 1 exit status

[英]golang with cgo throws error collect2: error: ld returned 1 exit status

我正在編譯一個 golang 包,其中包括使用cgo集成一個共享的 c 庫。 一切都在golang:1.15.15 images golang:1.15.15golang:1.16.6 golang:1.16.7內成功構建,但由於golang:1.16.7 golang:1.17 (也是golang:1.17 )它失敗並出現錯誤:

/usr/bin/ld: src/foobar/lib/libXYZ.so: undefined reference to `feenableexcept'
/usr/bin/ld: src/foobar/lib/libXYZ.so: undefined reference to `floor'
...
/usr/bin/ld: src/foobar/lib/libXYZ.so: undefined reference to `memoFree'
/usr/bin/ld: src/foobar/lib/libXYZ.so: undefined reference to `memoMalloc'
collect2: error: ld returned 1 exit status

我查看了 golang 發行說明,找不到cgo任何相關更改。

我檢查了 gcc 和 ld 的版本,這些都是不同的。 我甚至安裝Ubuntu的發行版與go1.13.8gcc (Ubuntu 8.4.0-3ubuntu2) 8.4.0GNU ld (GNU Binutils for Ubuntu) 2.34 ,在那里我遇到了這個問題,所以我想,那go那張沒有原因它。

您有任何線索或建議,我如何才能找到此問題的根本原因? 檢查gcc和ld是否正確,或者其他哪些工具需要調查?

感謝 Zyl,我能夠縮小問題的范圍。

我檢查了幾個發行版(bullseye、buster、stretch),使用bullseye,構建失敗了。 就我而言,來自binutilsgccld版本都沒有導致問題。

看起來,用於處理鏈接器的DT_NEEDED標簽的默認設置已更改。 我解決了我的問題,從https://stackoverflow.com/a/62117174/2290153獲取解決方案並將export CGO_LDFLAGS=-Wl,--no-as-needed到環境中。 根據https://manpages.debian.org/bullseye/binutils-common/gold.1.en.html,這是ld.gold鏈接器的默認值,但不是ld的默認值。

對我幫助很大的是go build命令的-x標志,用於查看為cgo執行的 gcc 命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM