2011-04-20 66 views
2

我已將我的傳球寫入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 

有人知道我爲什麼會得到這個錯誤?謝謝!

回答

3

嗯,我通過重新命名pass模塊到-libLLVM_xxx來修復它。顯然你必須將它命名爲libLLVM_「something」,以便它可以動態地與LLVM中的所有其他傳遞一起運行。不知道爲什麼,但它的作品!

2

您必須將您的通行證鏈接至llc。默認情況下,llc從lib/Transforms中幾乎沒有任何東西,所以你的通行證不會鏈接到llc。

+0

然後,我決定徹底移除llc並找不到符號未找到錯誤仍然存​​在=( – 2011-04-20 22:44:59

+0

@Esther,正如我所說的,您必須通過手將庫與您的通行證鏈接到llc。 – 2011-04-21 16:17:31