LLVM添加传递链接错误

LLVM添加传递链接错误,llvm,compiler-optimization,Llvm,Compiler Optimization,我已经在llvm/lib/Transforms中编写了我的pass,其名称为createABCDPass。我在通行证中添加了以下代码: namespace llvm { FunctionPass *createABCDPass(); } FunctionPass *llvm::createABCDPass() { return new AbcRemoval(); } 其中,AbcRemoval是通行证的等级 之后,我在lib/CodeGen/LLVMTargetMachine.cpp中进行了转

我已经在
llvm/lib/Transforms
中编写了我的pass,其名称为
createABCDPass
。我在通行证中添加了以下代码:

namespace llvm { FunctionPass *createABCDPass(); }
FunctionPass *llvm::createABCDPass() { return new AbcRemoval(); }
其中,
AbcRemoval
是通行证的等级

之后,我在
lib/CodeGen/LLVMTargetMachine.cpp
中进行了转发声明,以便识别我的通行证:

namespace llvm { FunctionPass *createABCDPass(); }
PM.add(createABCDPass());
但是,在llvm上运行make时,会出现以下错误:

llvm[2]: Linking Release executable llc (without symbols)
Undefined symbols:
  "llvm::createABCDPass()", referenced from:
      llvm::LLVMTargetMachine::addCommonCodeGenPasses(llvm::PassManagerBase&, llvm::CodeGenOpt::Level, bool, llvm::MCContext*&)in libLLVMCodeGen.a(LLVMTargetMachine.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[2]: *** [/Users/.../llvm/Release/bin/llc] Error 1
make[1]: *** [llc/.makeall] Error 2
make: *** [all] Error 1

有人知道我为什么会犯这个错误吗?谢谢

您必须将您的通行证链接到llc。默认情况下,llc几乎不从
lib/Transforms
中提取任何内容,因此您的通行证不会链接到llc。

啊,最后我将通行证模块重命名为-libLLVM_xxx,从而解决了这个问题。显然,您必须将其命名为libLLVM_uu“something”,以便它与LLVM中的所有其他过程一起动态运行。不知道为什么,但它起作用了

是的,然后我决定完全删除llc,符号未找到错误仍然存在=(@Esther,正如我所说的,你必须用你的手将图书馆与llc连接起来。