Using LLVM linker when using Clang & CMake
告诉CMake使用LLVM链接器llvm-link而不是GNU ld作为链接器的最佳方法是什么? 在配置项目时
默认链接器似乎保持不变,其余为usr/bin/ld(在Linux上)。
如果不使用单独的工具链文件,是否有可能?
-
stackoverflow.com/a/25274328/69663似乎相关
事实证明这与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。
-
当您说系统链接器时,是指它在您的$PATH中首先找到的那个,还是使用usrbin中的那个被硬编码为clang?
-
Clang对链接程序搜索路径AFAIK进行硬编码,并尝试在$PATH以外的其他位置获取ld二进制文件。 我说"系统链接器"是指本机目标代码的标准链接器,而不是LLVM字节码链接器。
-
@orian:看看这个例子:git.icir.org/binpacpp.git/blob/HEAD:/cmake/EnableLLVM.cmake
从3.4开始,clang在路径上查找ld之前先在GCCInstallation.getParentLibPath() +"/../" + GCCInstallation.getTriple().str() +"/bin"处查找链接器(ld)。 您应该能够将链接器放入/usr/lib/gcc/---//ld中,并由clang一步调用它。 要手动指定此位置,请使用未记录的-B标志。 不幸的是,我不认为有一种方法可以更改搜索到的链接器的名称,因此使用ld.gold或lld将需要在上述位置进行符号链接。