+-
c – LLVM-5.0 Makefile未定义引用失败
在我的代码中包含以下语句

main_module->转储(); // main_module的类型为llvm :: Module *

导致以下链接器错误:

对’llvm :: Module :: dump()const’的未定义引用

dump方法位于/usr/lib/llvm-5.0/include/llvm/IR/Module.h中

我检查了堆栈溢出(Using llvm::Function::dump(), linker gives “undefined reference to `llvm::Value::dump() const'”),当链接器没有以正确的顺序送入库时,我们似乎得到了这个错误.但是,我在编译命令中最终有了库:

clang -5.0 -g -O3 main.cpp -o main llvm-config-5.0 –cxxflags –ldflags –system-libs –libs core mcjit native

任何帮助表示赞赏.

奇怪的是,链接器想出了dump方法的类型.它明显地包含在包含文件中.那么为什么它会称之为未定义的引用呢?

代码我正在尝试运行:
`

# include "llvm/IR/LLVMContext.h"
# include "llvm/IR/Module.h"
# include "llvm/IR/IRBuilder.h"
# include <iostream>

using namespace llvm;

static LLVMContext ctxt;
static IRBuilder<> builder(ctxt);

int main(int argc, char** argv) {

    Module* main_module = new Module("main_module", ctxt);
    std::cout << main_module->getModuleIdentifier() << "\n";

    FunctionType* func_type = FunctionType::get(builder.getInt32Ty(), false);
    Function* main_func = Function::Create(func_type,Function::ExternalLinkage, "main", main_module);

    if (main_module->getFunction("main")) {
        std::cout << "Found function!\n";
    }

    main_module->dump();  // need this for debugging and testing reasons with LLVM

    return 0;
}
最佳答案
除了 Subrat提供的解决方案之外,您还可以调整代码以避免调用dump.你可以通过调用来实现同样的目的:

main_module->print(llvm::outs(), nullptr);

同样,如果要转储LLVM函数,可以编写:

main_func->print(llvm::outs());

实际上,从LLVM 5.0.0开始,这就是dump()函数的实现方式.

点击查看更多相关文章

转载注明原文:c – LLVM-5.0 Makefile未定义引用失败 - 乐贴网