Linker Can';t链接到libLLVMSupport.a

Linker Can';t链接到libLLVMSupport.a,linker,clang,llvm,linker-errors,Linker,Clang,Llvm,Linker Errors,我正在尝试编译简化的叮当声“driver.cpp”-为参数添加了printf-我正在获得与libLLVMSupport的链接。错误-未找到StringSaver类 # lib echo "compiling cmd builder (x86_64) ..." clang++ `../llvm_34_local_installed2/bin/llvm-config --cxxflags` -I ../llvm_34/tools/clang/include -I ../llvm_34_build_l

我正在尝试编译简化的叮当声“driver.cpp”-为参数添加了printf-我正在获得与libLLVMSupport的链接。错误-未找到StringSaver类

# lib
echo "compiling cmd builder (x86_64) ..."
clang++ `../llvm_34_local_installed2/bin/llvm-config --cxxflags` -I ../llvm_34/tools/clang/include -I ../llvm_34_build_local2/tools/clang/include  -c ./lib_cmd_builder.cpp -o ./lib_cmd_builder_x86_64.o

echo "linking cmd builder (x86_64) ..."
CMD="clang++ `../llvm_34_local_installed2/bin/llvm-config --ldflags` ./lib_cmd_builder_x86_64.o -o exe_cmd_builder_x86_64 `../llvm_34_local_installed2/bin/llvm-config --libs` -lclangARCMigrate -lclangAST -lclangASTMatchers -lclangAnalysis -lclangApplyReplacements -lclangBasic -lclangCodeGen -lclangDriver -lclangDynamicASTMatchers -lclangEdit -lclangFormat -lclangFrontend -lclangFrontendTool -lclangIndex -lclangLex -lclangParse -lclangQuery -lclangRewriteCore -lclangRewriteFrontend -lclangSema -lclangSerialization -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangStaticAnalyzerFrontend -lclangTidy -lclangTidyGoogleModule -lclangTidyLLVMModule"

echo "[${CMD}]"
${CMD}
错误消息:

Undefined symbols for architecture x86_64:

  "typeinfo for llvm::cl::StringSaver", referenced from:

      typeinfo for (anonymous namespace)::StringSetSaver in lib_cmd_builder_x86_64.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)
正在检查是否找到libLLVM并包含命令行对象数据:

ar -t ../llvm_34_local_installed2/lib//libLLVMSupport.a | grep CommandLine

CommandLine.cpp.o
(在-L路径上找到):

(包含CommandLine.cpp对象数据):

StringSaver类在CommandLine.cpp中声明:

/Users/asmirnov/Documents/dev/src/llvm_34/include/llvm/Support/CommandLine.h

class StringSaver {

  virtual void anchor();

public:

  virtual const char *SaveString(const char *Str) = 0;

  virtual ~StringSaver() {};  // Pacify -Wnon-virtual-dtor.

};
StringSaver继承器在self文件(lib_cmd_builder.cpp)中声明和实现:

还检查了x86_64(我的主机设备)的构建:


在编译库源代码时,我不得不使用
-fno-rtti

class StringSaver {

  virtual void anchor();

public:

  virtual const char *SaveString(const char *Str) = 0;

  virtual ~StringSaver() {};  // Pacify -Wnon-virtual-dtor.

};
namespace {

  class StringSetSaver : public llvm::cl::StringSaver {

  public:

    StringSetSaver(std::set<std::string> &Storage) : Storage(Storage) {}

    const char *SaveString(const char *Str) LLVM_OVERRIDE {

      return SaveStringInSet(Storage, Str);

    }

  private:

    std::set<std::string> &Storage;

  };

}
clang++ -L/Users/asmirnov/Documents/dev/src/llvm_34_local_installed2/lib   -lcurses -lpthread -lz ./lib_cmd_builder_x86_64.o -o exe_cmd_builder_x86_64 -lLLVMInstrumentation -lLLVMIRReader -lLLVMAsmParser -lLLVMDebugInfo -lLLVMOption -lLLVMLTO -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter -lLLVMBitReader -lLLVMTableGen -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMSparcCodeGen -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMR600CodeGen -lLLVMR600Desc -lLLVMR600Info -lLLVMR600AsmPrinter -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMHexagonCodeGen -lLLVMHexagonAsmPrinter -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMMCDisassembler -lLLVMMCParser -lLLVMInterpreter -lLLVMMCJIT -lLLVMJIT -lLLVMCodeGen -lLLVMObjCARCOpts -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lclangARCMigrate -lclangAST -lclangASTMatchers -lclangAnalysis -lclangApplyReplacements -lclangBasic -lclangCodeGen -lclangDriver -lclangDynamicASTMatchers -lclangEdit -lclangFormat -lclangFrontend -lclangFrontendTool -lclangIndex -lclangLex -lclangParse -lclangQuery -lclangRewriteCore -lclangRewriteFrontend -lclangSema -lclangSerialization -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangStaticAnalyzerFrontend -lclangTidy -lclangTidyGoogleModule -lclangTidyLLVMModule
lipo -info ../llvm_34_local_installed2/lib/libLLVMSupport.a
input file ../llvm_34_local_installed2/lib/libLLVMSupport.a is not a fat file
Non-fat file: ../llvm_34_local_installed2/lib/libLLVMSupport.a is architecture: x86_64