无法在CMake中更改默认链接器

16

我正在尝试将我的链接器更改为ld.gold,以便更快地构建LLVM和CLANG。我使用以下命令更改了我的环境变量:

I am trying to change my linker to ld.gold so that I can build LLVM and CLANG faster. I have changed my environment variable with:

export LD=ld.gold

我已经在ccmake中将CMAKE_LINKER更改为/usr/bin/ld.gold。然而,在生成文件时,我的链接器被检测为GNU ld。编译期间运行top确认正在运行ld而不是gold。

当编辑CMake链接可执行文件变量为:

cmake -DCMAKE_LINKER=/usr/bin/ld.gold -DCMAKE_CXX_LINK_EXECUTABLE="<CMAKE_LINKER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>" -G "Unix Makefiles" ../llvm

我收到以下错误消息:

/usr/bin/ld.gold: -Werror=date-time: unknown option
/usr/bin/ld.gold: use the --help option for usage information
utils/PerfectShuffle/CMakeFiles/llvm-PerfectShuffle.dir/build.make:94: recipe for target 'bin/llvm-PerfectShuffle' failed
make[2]: *** [bin/llvm-PerfectShuffle] Error 1
CMakeFiles/Makefile2:13983: recipe for target 'utils/PerfectShuffle/CMakeFiles/llvm-PerfectShuffle.dir/all' failed

我在使用Ubuntu 16.04,但在Arch Linux上也遇到了同样的问题。

谢谢。


可能是CMake:使用自定义链接器的重复问题。 - Tsyvarev
4
我特别指出设置CMAKE_LINKER变量无效,这是那个问题的解决方案。 - Sam G
1
它是 CMAKE_{C,CXX}_LINK_EXECUTABLE - arrowd
1
你的链接器不支持选项-Werror=date-time。因为这实际上是一个编译器选项,你可以尝试从CMAKE_CXX_LINK_EXECUTABLE定义中删除<FLAGS> - Tsyvarev
删除<FLAGS>会给我报错 ld.gold: -Wl, -allow-shlib-undefined: 未知选项。我已经尝试了几乎所有可能的变量组合,但没有运气。 - Sam G
显示剩余2条评论
2个回答

14

CMAKE_EXE_LINKER_FLAGS=-fuse-ld=gold 将会向编译器传递 -fuse-ld=gold,这将正确使用 gold 链接器。


1
从版本3.29(尚未发布)开始,CMake提供了一种设置链接器的方法。只需在CMake调用中添加-DCMAKE_LINKER_TYPE=GOLD即可(文档)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接