c++ - 使用 llvm::Function::dump(),链接器给出 "undefined reference to ` llvm::Value::dump() const'"

标签 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`

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

最佳答案

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

所以你需要类似的东西

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

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

关于c++ - 使用 llvm::Function::dump(),链接器给出 "undefined reference to ` llvm::Value::dump() const'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423120/

相关文章:

c++ - 带有 Visual Studio 2017 的点云库

c++ - 为什么 getpeername 中的 namelen-parameter 在 Winsock 中使用指针?

c - 有没有办法检测,C 文件被直接编译成可执行文件?

c++ - 在 operator= 中使用 std::function 的问题

c++ - LLVM 在运行时获取声明函数的参数值

c++ - 使用LLVM检测C/C++代码

assembly - LLVM 如何避免为 `br` IR 指令生成冗余 native 代码?

c++ - Crypto++ DES 实现和 key 长度

c++ - 没有匹配函数调用 'fscanf'

c++ - 要求编译器发出无分支/恒定时间代码