LLVM添加传递 - 链接错误

问题描述:

我已将我的传球写入llvm/lib/Transforms,其名称为createABCDPass。我已经添加了下面的代码在我的通行证:LLVM添加传递 - 链接错误

namespace llvm { FunctionPass *createABCDPass(); } 
FunctionPass *llvm::createABCDPass() { return new AbcRemoval(); } 

其中AbcRemoval是类的通行证。

在那之后,我曾经为了做一个向前声明中lib/CodeGen/LLVMTargetMachine.cpp认识到我的通行证:当我运行就LLVM

namespace llvm { FunctionPass *createABCDPass(); } 
PM.add(createABCDPass()); 

但是,我得到以下错误:

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 

有人知道我为什么会得到这个错误?谢谢!

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

您必须将您的通行证链接至llc。默认情况下,llc从lib/Transforms中几乎没有任何东西,所以你的通行证不会链接到llc。

+0

然后,我决定彻底移除llc并找不到符号未找到错误仍然存​​在=( – 2011-04-20 22:44:59

+0

@Esther,正如我所说的,您必须通过手将库与您的通行证链接到llc。 – 2011-04-21 16:17:31