告诉CMake使用LLVM链接器llvm-link
而不是GNU ld
作为链接器的最佳方法是什么?使用
CXX=clang++ cmake <args>
默认链接器似乎不受影响,保留usr/bin/ld
(在Linux上)。
答案 0 :(得分:11)
这与CMake无关:clang++
默认使用系统链接器。例如,
echo "#include <atomic>\n int main() { return 0; }" \
| clang++ -x c++ -std=c++11 -stdlib=libc++ -
使用/usr/bin/ld
链接应用程序。要将链接器更改为llvm-link
,需要首先发出LLVM字节代码,然后调用链接器,例如:
echo "#include <atomic>\n int main() { return 0; }" \
| clang++ -x c++ -std=c++11 -stdlib=libc++ -S -emit-llvm -o - - \
| llvm-link -o binary -
这会绕过/usr/bin/ld
。
答案 1 :(得分:5)
从3.4开始,clang
在ld
之前查找链接器(GCCInstallation.getParentLibPath() + "/../" + GCCInstallation.getTriple().str() + "/bin"
),然后在路径上查找ld
。您应该能够将链接器放在/usr/lib/gcc/<arch><sub>-<vendor>-<sys>-<abi>/<version>/ld
中并通过clang
一步调用它。要手动指定此位置,请使用未记录的 -B
标志。不幸的是,我不相信有一种方法可以改变搜索链接器的名称,因此使用ld.gold或lld将需要在上述位置使用符号链接。