使用llvm :: Function :: dump(),链接器给出了`llvm :: Value :: dump()const'""未定义的引用。

时间:2014-03-15 11:22:48

标签: c++ clang llvm

我尝试使用这些相同的编译器标志生成LLVM IR代码,这是我在同一台机器上成功完成的Kaleidoscope tutorial的一部分。

我的代码在clang ++ 3.4中编译时没有错误。但是,在链接时我得到:

undefined reference to `llvm::Value::dump() const'

错误由以下行触发:

if (generator.code()) // returns llvm::Function*, or NULL
  generator.code()->dump();

如果我删除对dump()的调用,链接器很高兴。

我使用的Clang ++标志是:

-O3 -g -Wall -std=c++11 -I./src `llvm-config --cppflags --ldflags --libs core jit native`

我很困惑,因为Kaleidoscope项目编译并运行正常并使用相同的编译器标志并且构建在同一台计算机上。

1 个答案:

答案 0 :(得分:3)

当与库链接时,必须在源/目标文件之后放置库。

所以你需要像

这样的东西
clang++ -O3 -g -Wall -std=c++11 -I./src \
    `llvm-config --cppflags --ldflags core jit native` \
    objectfile1.o objectfile2.o \
    `llvm-config --libs core jit native` \
    -o outputfile

这是因为链接器按照命令行上给出的顺序查找符号。