首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bazel和gcc10的模架连接件?

如何使用bazel和gcc10的模架连接件?
EN

Stack Overflow用户
提问于 2022-07-24 09:42:52
回答 2查看 305关注 0票数 4

莫尔德是最新的高速链接器,我希望在编译重型c++存储库时使用它来替换默认的c++链接器。

我使用Bazel + GCC 10.2进行编译,模具文档提供了一个gcc -B/mold/path解决方案。但是,我没有找到将这个CLI选项传递给bazel的方法。

我试过bazel build --linkopt=-B/usr/local/libexec/mold //src:XXX--copt=-B/usr/local/libexec/mold,但两者都不起作用,bazel仍然使用旧的链接器。

我可以确保模具已经安装在我的系统上,因为我可以编译c++ helloworld程序链接通过模具直接运行g++ -B/usr/local/libexec/mold

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-31 04:12:25

彼得森的回答在大多数情况下都可以工作,但是如果您使用的是过时的Bazel版本,比如像我这样的0.2x版本,那么Bazel链接阶段就会有一个bug。错误导致用户链接标志总是被Bazel默认链接标志覆盖。

要验证该错误,请运行bazel build --subcommands --linkopt=-B/any_path <your-target>,您将看到有关链接阶段标志的详细信息。

在我的例子中,Bazel默认标志-fuse-ld=gold-B/usr/bin总是在用户标志之后出现,所以我必须创建一个软链接/usr/bin/ld.gold -> /usr/local/bin/mold。这个解决办法对我有用。

所以试着:

代码语言:javascript
复制
mv /usr/bin/ld.gold /usr/bin/ld.glod.backup
ln -s /usr/local/bin/mold /usr/bin/ld.gold
票数 0
EN

Stack Overflow用户

发布于 2022-07-25 17:05:14

试试--linkopt=-fuse-ld=bfd --linkopt=-B/usr/local/libexec/mold --sandbox_block_path=/usr/bin/ld.bfd

(巴泽尔知道一些链接,如GNU黄金和lld。如果检测到,它们将显式地告诉编译驱动程序使用它们,这将绕过/usr/local/libexec/mold中的霉菌/usr/local/libexec/mold)。

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

https://stackoverflow.com/questions/73097267

复制
相关文章

相似问题

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