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



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

CXX=clang++ cmake <args>

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

是否可以不使用单独的工具链文件?

事实证明这与

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 .

从 3.4 开始,clang在路径上查找ld之前,会在GCCInstallation.getParentLibPath() + "/../" + GCCInstallation.getTriple().str() + "/bin"处查找链接器 ( ld )。 您应该能够将链接器放入/usr/lib/gcc/<arch><sub>-<vendor>-<sys>-<abi>/<version>/ld,并通过 1 步由clang调用它。 若要手动指定此位置,请使用未记录的 -B 标志。 不幸的是,我不相信有办法更改搜索的链接器的名称,因此使用 ld.gold 或 lld 将需要在上述位置使用符号链接。

最新更新