我尝试使用这些相同的编译器标志生成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项目编译并运行正常并使用相同的编译器标志并且构建在同一台计算机上。
答案 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
这是因为链接器按照命令行上给出的顺序查找符号。