0

我正在尝试运行一个使用 Clang 和 LLVM 的工具。工具名称是 docker 提供的 cppgrep。请从 github 存储库中找到它 - https://github.com/peter-can-talk/cppnow-2017。我曾尝试使用 Ubuntu 16.04 和 17.10,我得到了与以下相同的错误:

root@522051d201d2:/home# ./cppgrep -help
./cppgrep: /usr/lib/x86_64-linux-gnu/libLLVM-4.0.so.1: version `LLVM_4.0' not found (required by ./cppgrep)
./cppgrep: /usr/lib/x86_64-linux-gnu/libclang-4.0.so.1: version `LLVM_4.0' not found (required by ./cppgrep)
root@522051d201d2:/home#

经过网上搜索,我发现我必须设置环境变量 LD_LIBRARY_PATH。因此,作为第一步,我在 docker 中找到了库文件的位置,请在下面找到输出:

root@522051d201d2:/home# find / -iname *libclang*.so*
/usr/lib/x86_64-linux-gnu/libclang-4.0.so
/usr/lib/x86_64-linux-gnu/libclang-4.0.so.1
/usr/lib/llvm-4.0/lib/libclang.so.1
/usr/lib/llvm-4.0/lib/libclang-4.0.so
/usr/lib/llvm-4.0/lib/libclang-4.0.0.so
/usr/lib/llvm-4.0/lib/libclang.so
/usr/lib/llvm-4.0/lib/libclang-4.0.so.1
/usr/lib/llvm-4.0/lib/clang/4.0.0/lib/linux/libclang_rt.dyndd-x86_64.so
/usr/lib/llvm-4.0/lib/clang/4.0.0/lib/linux/libclang_rt.asan-i686.so
/usr/lib/llvm-4.0/lib/clang/4.0.0/lib/linux/libclang_rt.asan-x86_64.so
/usr/lib/llvm-4.0/lib/clang/4.0.0/lib/linux/libclang_rt.asan-i386.so

在这一步之后,我设置 LD_LIBRARY_PATH 如下:

root@522051d201d2:/home# echo $LD_LIBRARY_PATH
/usr/lib:/usr/lib/llvm-4.0/lib/:/usr/lib/x86_64-linux-gnu/

最后,我使用命令导出了它export LD_LIBRARY_PATH。现在,如果我尝试运行 cppgrep 工具,我仍然会遇到同样的错误。构建docker后测试工具的命令如下:(1)cd进入cppgrep目录,如code/cppgrep,(2)进入docker容器并挂载文件夹/home: (3)使用命令$ docker run -it -v $PWD:/home clang 运行cppgrep 。./cppgrep 'x' test.cpp它应该返回名称为 x 的函数和变量。

要复制错误,请在从 github 存储库下载并解压缩文件后,使用$ docker build -t clang .命令构建 docker 容器。然后按照上一段中的 1,2,3 步骤进行操作。

4

1 回答 1

1

经过几天的努力,解决了!!

我对错误原因的初步假设是正确的。cppgrep工具无法使用clang-llvm环境,但是我在向cppgrep工具提供环境信息的方式上犯了错误。

答案有两个步骤:(1)更改 Makefile 以指向安装 llvm 的正确位置,在我的情况下,我将 Makefile 中的以下行从 更改HEADERS := -isystem /llvm/include/HEADERS := -isystem /usr/lib/llvm-4.0/include/。(2) 必须使用命令重新编译文件make,输入一个空格并保存 cppgrep.cpp 文件,然后再给出命令,否则,你会得到一个消息make: Nothing to be done for 'all'.

就是这样,现在您应该可以通过运行./cppgrep 'x' test.cpp或运行 cppgrep 工具了./cppgrep -help。要使用此 docker 中的其他工具,例如 ast-dump、mccabe 等,您必须在使用它们之前遵循上述两个步骤。

于 2018-01-23T18:00:11.217 回答