我正在尝试生成 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/