首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >golang with cgo抛出错误collect2: error: ld returned 1 exit status

golang with cgo抛出错误collect2: error: ld returned 1 exit status
EN

Stack Overflow用户
提问于 2021-10-08 12:20:45
回答 1查看 356关注 0票数 1

我正在编译一个golang包,其中包含一个使用cgo的共享c库的集成。docker镜像golang:1.15.15golang:1.16.6中的所有内容都构建成功,但由于golang:1.16.7 (也是golang:1.17),它会失败,并返回错误:

代码语言:javascript
运行
复制
/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和I的版本,它们都是不同的。我甚至用go1.13.8gcc (Ubuntu 8.4.0-3ubuntu2) 8.4.0GNU ld (GNU Binutils for Ubuntu) 2.34设置了一个ubuntu发行版,在那里我遇到了这个问题,所以我猜,go so不会导致这个问题。

你有什么线索或建议,我怎样才能找到这个问题的根本原因?检查一下gcc和it对不对,还有哪些工具需要调查?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-13 06:48:51

多亏了Zyl,我才能缩小问题的范围。

我检查了几个发行版(bullseye,buster,stretch),结果发现构建失败了。在我的例子中,既不是来自binutilsld版本,也不是gcc导致的问题。

看起来,链接器处理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命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69495750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档