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

mav*_*vam 16 linker cmake clang

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

CXX=clang++ cmake <args>
Run Code Online (Sandbox Code Playgroud)

默认链接器似乎不受影响,保留usr/bin/ld(在Linux上).

这可能不使用单独的工具链文件吗?

mav*_*vam 11

这与CMake无关:clang++默认情况下使用系统链接器.例如,

echo "#include <atomic>\n int main() { return 0; }" \
    | clang++ -x c++ -std=c++11 -stdlib=libc++ -
Run Code Online (Sandbox Code Playgroud)

用于/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 -
Run Code Online (Sandbox Code Playgroud)

这绕过了/usr/bin/ld.

  • 如何用cmake完成? (7认同)
  • @orian:看看这个例子:http://git.icir.org/binpacpp.git/blob/HEAD:/cmake/EnableLLVM.cmake (2认同)

Ale*_*ker 5

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