LLVM添加传递链接错误

时间:2011-04-20 19:56:11

标签: llvm compiler-optimization

我在llvm/lib/Transforms写了我的传递,并且它被称为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

有人知道我为什么会收到此错误?谢谢!

2 个答案:

答案 0 :(得分:3)

啊,我最后通过将pass模块重命名为-libLLVM_xxx来修复它。显然你必须将它命名为libLLVM_“something”,以便它与LLVM中的所有其他传递一起动态运行。不知道为什么,但它确实有效!

答案 1 :(得分:2)

你必须将你的传球链接到有限责任公司。默认情况下,llc从lib/Transforms几乎不提取任何内容,因此您的通行证不会链接到llc。