问题描述
我正在尝试生成LLVM IR代码,作为万花筒教程的一部分,我已成功完成了该操作.
在同一台计算机上,使用这些相同的编译器标志.I'm trying to generate LLVM IR code, which I have done successfully as part of the Kaleidoscope tutorial on this same machine, using these same compiler flags.
我的代码在clang ++ 3.4中编译时没有错误.但是,在链接时,我得到了:
My code compiles without errors in clang++ 3.4. However, at link time I'm getting:
undefined reference to `llvm::Value::dump() const'
该错误是由以下行触发的:
The error is being triggered by the line:
if (generator.code()) // returns llvm::Function*, or NULL
generator.code()->dump();
如果我取消对dump()
的呼叫,则链接器很高兴.
If I remove the call to dump()
, the linker is happy.
我正在使用的Clang ++标志是:
Clang++ flags I'm using are:
-O3 -g -Wall -std=c++11 -I./src `llvm-config --cppflags --ldflags --libs core jit native`
我很困惑,因为万花筒项目可以编译并正常运行,并且使用相同的编译器标志并且在同一台计算机上构建.
I'm confused, because the Kaleidoscope project compiles and runs fine and uses the same compiler flags and is built on the same computer.
推荐答案
与库链接时,必须将库放置在源文件/目标文件后 .
When linking with libraries the libraries has to be placed after the source/object files.
所以您需要类似的东西
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
这是因为链接器按照在命令行中给出的顺序查找符号.
It's because the linker looks for symbols in the order they are given on the command line.
这篇关于使用llvm :: Function :: dump(),链接器给出“对`llvm :: Value :: dump()const的未定义引用".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!