莫尔德是最新的高速链接器,我希望在编译重型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。
发布于 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。这个解决办法对我有用。
所以试着:
mv /usr/bin/ld.gold /usr/bin/ld.glod.backup
ln -s /usr/local/bin/mold /usr/bin/ld.gold发布于 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)。
https://stackoverflow.com/questions/73097267
复制相似问题