从LLVM核心库开始预订不能编译代码

时间:2014-09-06 09:29:27

标签: llvm

我正在阅读“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

更新:

检查下面的答案,其中包含工作泊坞窗图片的链接。

3 个答案:

答案 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:)