LLVM - 将 LLVM-13 与 Conan 一起使用时无法链接支持库/链接器错误

LLVM - Cant Link Support Librarys/Linker Erros When Using LLVM-13 with Conan

提问人:cgbsu 提问时间:12/29/2022 更新时间:12/29/2022 访问量:162

问:

我正在使用 LLVM conan 包来构建我的编译器,到目前为止,它进展顺利,直到我一直在尝试使用 和 .我得到了对两者的未定义引用。两者似乎都来自 LLVM 支持库,并且至少似乎是自动生成的(我在我的系统上找到了它的源代码)。柯南似乎告诉 CMake 在 LLVM 支持库中链接,因为我可以看到当我尝试构建并收到错误(例如)时它被传递给链接器。我看到有些人过去在切换到带有 LLVM 3/4 的 GCC 5 时遇到链接器错误。但这是 LLVM-13.0.0 和 gcc-12.0.1。我看到柯南警告 C++ ABI 与 GCC-5 的兼容性llvm::sys::getDefaultTargetTriplellvm::TargetRegistry::lookupTargetllvm::sys::getDefaultTargetTriple.inc-lLLVMSupport

我更改了个人资料上的设置,但尚未更改。我可能会尝试重建 LLVM 并更新这篇文章。

我真的需要在几个小时内得到这个,是吗

  1. 有一种方法可以手动知道我的操作系统的三元组字符串应该是什么?我在这里看到了格式。它似乎是基于宏?就足够了吗?gcc -dumpmachine
  2. 用它来手动生成“目标”有多可行,我正在对此进行逆向工程
  3. 主要问题是,我怎样才能修复这个错误并链接到和llvm::sys::getDefaultTargetTriplellvm::TargetRegistry::lookupTarget

以下是完整的日志:

root@3129d254c74c:~/workdir/compilerbuild# ninja warp_compiler
[2/2] Linking CXX executable bin/warp_compiler
FAILED: bin/warp_compiler 
: && /usr/bin/c++   CMakeFiles/warp_compiler.dir/Compiler/Compile.cpp.o CMakeFiles/warp_compiler.dir/Compiler/FunctionParser.cpp.o CMakeFiles/warp_compiler.dir/Compiler/Main.cpp.o -o bin/warp_compiler -L/root/.conan/data/cpputest/4.0/_/_/package/7f06ab4d29b1f14af224d13dc05f362c6832ed41/lib   -L/root/.conan/data/llvm-core/13.0.0/_/_/package/6efbb14f313e71b5e1dbf77c1c011f47614b7c7c/lib   -L/root/.conan/data/libxml2/2.9.10/_/_/package/c4a7cacf01760cbd7354b11a55bf653f7df2bf5d/lib   -L/root/.conan/data/zlib/1.2.12/_/_/package/2a19826344ff00be1c04403f2f8e7008ed3a7cc6/lib   -L/root/.conan/data/libiconv/1.17/_/_/package/2a19826344ff00be1c04403f2f8e7008ed3a7cc6/lib -Wl,-rpath,/root/.conan/data/cpputest/4.0/_/_/package/7f06ab4d29b1f14af224d13dc05f362c6832ed41/lib:/root/.conan/data/llvm-core/13.0.0/_/_/package/6efbb14f313e71b5e1dbf77c1c011f47614b7c7c/lib:/root/.conan/data/libxml2/2.9.10/_/_/package/c4a7cacf01760cbd7354b11a55bf653f7df2bf5d/lib:/root/.conan/data/zlib/1.2.12/_/_/package/2a19826344ff00be1c04403f2f8e7008ed3a7cc6/lib:/root/.conan/data/libiconv/1.17/_/_/package/2a19826344ff00be1c04403f2f8e7008ed3a7cc6/lib  lib/liblibwarp.a  -lCppUTestExt  -lCppUTest  -lLLVMTableGenGlobalISel  -lLLVMTableGen  -lLLVMFileCheck  -lLLVMAArch64AsmParser  -lLLVMAArch64CodeGen  -lLLVMAArch64Disassembler  -lLLVMAArch64Desc  -lLLVMAArch64Info  -lLLVMAArch64Utils  -lLLVMAMDGPUAsmParser  -lLLVMAMDGPUCodeGen  -lLLVMMIRParser  -lLLVMAMDGPUDisassembler  -lLLVMAMDGPUDesc  -lLLVMAMDGPUInfo  -lLLVMAMDGPUUtils  -lLLVMARMAsmParser  -lLLVMARMCodeGen  -lLLVMARMDisassembler  -lLLVMARMDesc  -lLLVMARMInfo  -lLLVMARMUtils  -lLLVMAVRAsmParser  -lLLVMAVRCodeGen  -lLLVMAVRDesc  -lLLVMAVRDisassembler  -lLLVMAVRInfo  -lLLVMBPFAsmParser  -lLLVMBPFCodeGen  -lLLVMBPFDesc  -lLLVMBPFDisassembler  -lLLVMBPFInfo  -lLLVMCoverage  -lLLVMDWARFLinker  -lLLVMDWP  -lLLVMDebugInfoGSYM  -lLLVMDlltoolDriver  -lLLVMFrontendOpenACC  -lLLVMFuzzMutate  -lLLVMHexagonCodeGen  -lLLVMHexagonAsmParser  -lLLVMHexagonDisassembler  -lLLVMHexagonDesc  -lLLVMHexagonInfo  -lLLVMInterfaceStub  -lLLVMInterpreter  -lLLVMLTO  -lLLVMExtensions  -lLLVMLanaiCodeGen  -lLLVMLanaiAsmParser  -lLLVMLanaiDisassembler  -lLLVMLanaiDesc  -lLLVMLanaiInfo  -lLLVMLibDriver  -lLLVMOption  -lLLVMLineEditor  -lLLVMMCA  -lLLVMMCJIT  -lLLVMMSP430AsmParser  -lLLVMMSP430CodeGen  -lLLVMMSP430Desc  -lLLVMMSP430Disassembler  -lLLVMMSP430Info  -lLLVMMipsAsmParser  -lLLVMMipsCodeGen  -lLLVMMipsDesc  -lLLVMMipsDisassembler  -lLLVMMipsInfo  -lLLVMNVPTXCodeGen  -lLLVMNVPTXDesc  -lLLVMNVPTXInfo  -lLLVMObjectYAML  -lLLVMOrcJIT  -lLLVMPasses  -lLLVMCoroutines  -lLLVMipo  -lLLVMFrontendOpenMP  -lLLVMIRReader  -lLLVMAsmParser  -lLLVMInstrumentation  -lLLVMLinker  -lLLVMVectorize  -lLLVMObjCARCOpts  -lLLVMExecutionEngine  -lLLVMRuntimeDyld  -lLLVMJITLink  -lLLVMOrcTargetProcess  -lLLVMOrcShared  -lLLVMPowerPCAsmParser  -lLLVMPowerPCCodeGen  -lLLVMPowerPCDesc  -lLLVMPowerPCDisassembler  -lLLVMPowerPCInfo  -lLLVMRISCVAsmParser  -lLLVMRISCVCodeGen  -lLLVMRISCVDisassembler  -lLLVMRISCVDesc  -lLLVMRISCVInfo  -lLLVMSparcAsmParser  -lLLVMSparcCodeGen  -lLLVMSparcDesc  -lLLVMSparcDisassembler  -lLLVMSparcInfo  -lLLVMSymbolize  -lLLVMDebugInfoPDB  -lLLVMSystemZAsmParser  -lLLVMSystemZCodeGen  -lLLVMSystemZDisassembler  -lLLVMSystemZDesc  -lLLVMSystemZInfo  -lLLVMWebAssemblyAsmParser  -lLLVMWebAssemblyCodeGen  -lLLVMWebAssemblyDisassembler  -lLLVMWebAssemblyDesc  -lLLVMWebAssemblyInfo  -lLLVMWebAssemblyUtils  -lLLVMWindowsManifest  -lLLVMX86AsmParser  -lLLVMX86CodeGen  -lLLVMCFGuard  -lLLVMGlobalISel  -lLLVMX86Desc  -lLLVMX86Disassembler  -lLLVMX86Info  -lLLVMXCoreCodeGen  -lLLVMAsmPrinter  -lLLVMDebugInfoDWARF  -lLLVMDebugInfoMSF  -lLLVMSelectionDAG  -lLLVMCodeGen  -lLLVMBitWriter  -lLLVMScalarOpts  -lLLVMAggressiveInstCombine  -lLLVMInstCombine  -lLLVMTransformUtils  -lLLVMTarget  -lLLVMAnalysis  -lLLVMProfileData  -lLLVMXCoreDesc  -lLLVMXCoreDisassembler  -lLLVMMCDisassembler  -lLLVMXCoreInfo  -lLLVMXRay  -lLLVMObject  -lLLVMMCParser  -lLLVMMC  -lLLVMDebugInfoCodeView  -lLLVMBitReader  -lLLVMCore  -lLLVMRemarks  -lLLVMBitstreamReader  -lLLVMTextAPI  -lLLVMBinaryFormat  -lLLVMSupport  -lLLVMDemangle  -lxml2  -lz  -liconv  -lcharset  -ldl  -lrt  -lm  -lpthread && :
/usr/bin/ld: CMakeFiles/warp_compiler.dir/Compiler/Compile.cpp.o: in function `Warp::SyntaxTranslation::LLVM::initialize_target(llvm::Module&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, llvm::TargetOptions, llvm::Optional<llvm::Reloc::Model>)':
Compile.cpp:(.text+0x1534): undefined reference to `llvm::TargetRegistry::lookupTarget(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
/usr/bin/ld: CMakeFiles/warp_compiler.dir/Compiler/Main.cpp.o: in function `main':
Main.cpp:(.text+0xf46): undefined reference to `llvm::sys::getDefaultTargetTriple[abi:cxx11]()'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
c gcc 链接器错误 llvm-c++-api

评论


答:

1赞 cgbsu 12/29/2022 #1

它使用的是旧的 libstdcxx,我运行:

conan profile update settings.compiler.libcxx=libstdc++11 default

然后编辑我的 conanfile.txt 以仅包含对 和 run 的引用llvm-core/13.0.0

conan install .. --build=llvm-core

现在它起作用了!