即使使用归档组,也无法在Linux上进行链接

时间:2015-11-13 22:14:18

标签: linux gcc ld

我很难在Linux上链接我的程序。我已经放弃并攻击了我使用归档组的Makefile。但是,我仍然对我知道导出的东西有一堆未定义的引用 - 构建在Windows上成功,如果我从源代码构建LLVM。

完整命令是

g++ -o ../Build/x64/Release/SemanticTest -s -m64 -L/usr/lib64 -L/usr/lib/llvm-3.6/lib -L/opt/wide/boost_1_59_0/stage/lib -L../Build/x64/Release   -Wl,--start-group ../Obj/SemanticTest/x64/Release/test.o ../Obj/SemanticTest/x64/Release/main.o  -lUtil -lSemantic -lParser -lLexer -lm -lstdc++ -lclangFrontend -lclangSerialization -lclangDriver -lclangTooling -lclangCodeGen -lclangParse -lclangSema -lclangAnalysis -lclangRewriteFrontend -lclangRewrite -lclangEdit -lclangAST -lclangLex -lclangBasic -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMAsmParser -lLLVMR600CodeGen -lLLVMipo -lLLVMVectorize -lLLVMR600AsmParser -lLLVMR600Desc -lLLVMR600Info -lLLVMR600AsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMLineEditor -lLLVMInstrumentation -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMCore -lLLVMSupport -ldl -lpthread -lncurses -lboost_program_options -larchive -lz -Wl,--end-group

我怎样才能说服ld真正找到我出口的东西?

1 个答案:

答案 0 :(得分:0)

这与不兼容的ABI有关。我有旧的缓存二进制文件,我需要清除。我用Clang 3.6重建了自己的作品,现在我可以大部分链接。只有在我的代码和我使用过的库之间使用std :: string的函数,即LLVM& Clang和Boost。

最终,我认为这可能是由于我尝试使用相同的构建脚本同时使用Precise和Willy所做的所有操作,例如安装Clang 3.6并尝试将其用作编译器。干净安装Willy做明显的事情就可以了。