我正在阅读“LLVM核心库入门”一书,但我无法编译第3章中的示例。我已经按照作者的建议安装了LLVM 3.4。我正在使用Mint Linux 64bit。
In file included from helloworld.c:1:0:
/home/user/llvm3.4/llvm/include/llvm/Bitcode/ReaderWriter.h:17:18: fatal error: string: No such file or directory
#include <string>
^
compilation terminated.
编辑:通过将文件从.c重命名为.cpp
解决了上述问题现在我面临另一个问题。
helloworld.cpp: In function ‘int main(int, char**)’:
helloworld.cpp:16:21: error: aggregate ‘llvm::LLVMContext context’ has incomplete type and cannot be defined
LLVMContext context;
^
helloworld.cpp:22:21: error: ‘cerr’ was not declared in this scope
std:cerr << "Error reading bitcode: " << error << std::end;
^
helloworld.cpp:22:21: note: suggested alternative:
In file included from helloworld.cpp:8:0:
/usr/include/c++/4.8/iostream:62:18: note: ‘std::cerr’
extern ostream cerr; /// Linked to standard error (unbuffered)
^
helloworld.cpp:22:17: warning: label ‘std’ defined but not used [-Wunused-label]
std:cerr << "Error reading bitcode: " << error << std::end;
^
make: *** [helloworld] Error 1
更新:
检查下面的答案,其中包含工作泊坞窗图片的链接。
答案 0 :(得分:1)
llvm-clang-samples项目包含许多使用LLVM和Clang API的示例,其中Makefile
用于演示如何构建它们与LLVM。它为最近的每个版本都有分支,包括3.4;所以你可以拉它,检查llvm3.4
分支并构建样本。然后,调整其Makefile
的构建步骤以编译书中的样本。
答案 1 :(得分:1)
makefile似乎有点坏了,Makefile中的链接行;
$(QUIET)$(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $^ `$(LLVM_CONFIG) --libs bitreader support`
...应该{(1}}最后一行;
$(LDFLAGS)
...让libs以正确的顺序链接。这使得第一个示例在我的Ubuntu机器上编译并运行。
有点偏离主题,但由于在环境中可能出现的问题太多我无法测试;首先,您可以使用此Dockerfile为您的开发构建一个工作环境;
$(QUIET)$(CXX) -o $@ $(CXXFLAGS) $^ `$(LLVM_CONFIG) --libs bitreader support` $(LDFLAGS)
这会下载示例,重命名第一个示例以不包含路径中的任何空格(似乎也会破坏Makefile)并修补第一个Makefile以正确构建内容,如果您只是启动图像并键入“make”。 / p>
答案 2 :(得分:0)
更新:
我与Packt Publishing就此问题进行了联系,作者很高兴上传了一个非常好用的码头图像:)
https://registry.hub.docker.com/u/rafaelauler/llvmbook/
检查图像中的/ workspace文件夹。
非常感谢作者和Packt Publishing:)