Linker 在使用Clang&;时使用LLVM链接器;克马克

Linker 在使用Clang&;时使用LLVM链接器;克马克,linker,cmake,clang,Linker,Cmake,Clang,告诉CMake使用LLVM链接器LLVM链接而不是GNUld作为链接器的最佳方式是什么?使用配置项目时 CXX=clang++ cmake <args> CXX=clang++cmake?这与cmake无关:clang++默认使用系统链接器。比如说, echo "#include <atomic>\n int main() { return 0; }" \ | clang++ -x c++ -std=c++11 -stdlib=libc++ - 这绕过了从3.

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

CXX=clang++ cmake <args>

CXX=clang++cmake?

这与cmake无关:
clang++
默认使用系统链接器。比如说,

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

这绕过了从3.4开始的
/usr/bin/ld

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

当您说“系统链接器”时,您是指它在
$PATH
中首先找到的链接器吗,或者使用
/usr/bin/
中的链接器是否已硬编码为clang?clang硬编码链接器搜索路径AFAIK,并尝试在
$path
之外的其他位置拾取
ld
二进制文件。我说“系统链接器”是指本机对象代码的标准链接器,而不是LLVM字节码链接器。@orian:查看此示例:似乎相关
echo "#include <atomic>\n int main() { return 0; }" \
    | clang++ -x c++ -std=c++11 -stdlib=libc++ -S -emit-llvm -o - - \
    | llvm-link -o binary -