【问题标题】:LLVM Adding a pass - linking errorLLVM 添加通行证 - 链接错误
【发布时间】:2011-04-20 19:56:10
【问题描述】:

我已经在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

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

【问题讨论】:

    标签: llvm compiler-optimization


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,然后我决定完全删除 llc 并且找不到符号错误仍然存​​在 =(
      • @Esther,正如我所说,您必须手动将图书馆与您的通行证链接到 llc。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 2012-10-06
      • 1970-01-01
      相关资源
      最近更新 更多