Как решить ошибку «Неопределенные символы для архитектуры x86_64» при использовании C++ API `llvm::InitializeAllAsmParsers()` в LLVM?

Я пытаюсь реализовать свой игрушечный язык программирования с LLVM в качестве бэкэнда.

Я пытаюсь сгенерировать файлы .o, используя эти API для инициализации:

llvm::InitializeAllTargetInfos();
llvm::InitializeAllTargets();
llvm::InitializeAllTargetMCs();
llvm::InitializeAllAsmParsers();
llvm::InitializeAllAsmPrinters();

Вот часть моего CMakeLists.txt:

find_package(LLVM REQUIRED CONFIG)
llvm_map_components_to_libnames(llvm_libraries analysis support core object irreader executionengine scalaropts instcombine orcjit runtimedyld)

add_executable(shepherdc ${SOURCE_FILE})
target_include_directories(shepherdc ${LLVM_INCLUDE_DIRS})
target_link_libraries(shepherdc ${llvm_libraries})

Это дает мне сообщение об ошибке:

Undefined symbols for architecture x86_64:
  "_LLVMInitializeAArch64AsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAArch64AsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAArch64Target", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAArch64TargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAArch64TargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAMDGPUAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAMDGPUAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAMDGPUTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAMDGPUTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeAMDGPUTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeARMAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeARMAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeARMTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeARMTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeARMTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeBPFAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeBPFAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeBPFTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeBPFTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeBPFTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeHexagonAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeHexagonAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeHexagonTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeHexagonTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeHexagonTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeLanaiAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeLanaiAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeLanaiTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeLanaiTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeLanaiTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMSP430AsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMSP430AsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMSP430Target", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMSP430TargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMSP430TargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMipsAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMipsAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMipsTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMipsTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeMipsTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeNVPTXAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeNVPTXTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeNVPTXTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeNVPTXTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializePowerPCAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializePowerPCAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializePowerPCTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializePowerPCTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializePowerPCTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeRISCVAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeRISCVAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeRISCVTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeRISCVTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeRISCVTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSparcAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSparcAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSparcTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSparcTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSparcTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSystemZAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSystemZAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSystemZTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSystemZTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeSystemZTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeWebAssemblyAsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeWebAssemblyAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeWebAssemblyTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeWebAssemblyTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeWebAssemblyTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeX86AsmParser", referenced from:
      llvm::InitializeAllAsmParsers() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeX86AsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeX86Target", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeX86TargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeX86TargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeXCoreAsmPrinter", referenced from:
      llvm::InitializeAllAsmPrinters() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeXCoreTarget", referenced from:
      llvm::InitializeAllTargets() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeXCoreTargetInfo", referenced from:
      llvm::InitializeAllTargetInfos() in libshepherd.a(IrWriter.cpp.o)
  "_LLVMInitializeXCoreTargetMC", referenced from:
      llvm::InitializeAllTargetMCs() in libshepherd.a(IrWriter.cpp.o)
ld: symbol(s) not found for architecture x86_64
clang-10: error: linker command failed with exit code 1 (use -v to see invocation)

На какую дополнительную библиотеку LLVM мне следует связать?


person linrongbin    schedule 16.07.2020    source источник


Ответы (1)


Добавьте в свой CMakeLists.txt следующий код для создания LLVMX86CodeGen; LLVMARMCodeGen... из ${LLVM_TARGETS_TO_BUILD}:

foreach(target ${LLVM_TARGETS_TO_BUILD})
  list(APPEND targets "LLVM${target}CodeGen")
endforeach()

target_link_libraries(shepherdc ${llvm_libraries} ${targets})
person Marco Romagnolo    schedule 09.03.2021