使用Clang和CMake时使用LLVM链接器

Using LLVM linker when using Clang & CMake

告诉CMake使用LLVM链接器llvm-link而不是GNU ld作为链接器的最佳方法是什么? 在配置项目时

1
CXX=clang++ cmake

默认链接器似乎保持不变,其余为usr/bin/ld(在Linux上)。

如果不使用单独的工具链文件,是否有可能?


事实证明这与CMake无关:clang++默认情况下使用系统链接器。 例如,

1
2
3
echo"#include
 int main() { return 0; }"
\
    | clang++ -x c++ -std=c++11 -stdlib=libc++ -

使用/usr/bin/ld链接应用程序。 要将链接器更改为llvm-link,首先需要发出LLVM字节码,然后调用该链接器,例如:

1
2
3
4
echo"#include
 int main() { return 0; }"
\
    | clang++ -x c++ -std=c++11 -stdlib=libc++ -S -emit-llvm -o - - \
    | llvm-link -o binary -

这会绕过/usr/bin/ld


从3.4开始,clang在路径上查找ld之前先在GCCInstallation.getParentLibPath() +"/../" + GCCInstallation.getTriple().str() +"/bin"处查找链接器(ld)。 您应该能够将链接器放入/usr/lib/gcc/---//ld中,并由clang一步调用它。 要手动指定此位置,请使用未记录的-B标志。 不幸的是,我不认为有一种方法可以更改搜索到的链接器的名称,因此使用ld.gold或lld将需要在上述位置进行符号链接。