/usr/lib/x86_64-linux-gnu/libLLVM-4.0.so.1: версия `LLVM_4.0'не найдена

Я пытаюсь запустить инструмент, который использует Clang и LLVM. Имя инструмента - 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. Итак, в качестве первого шага я нашел расположение файлов библиотеки в докере, пожалуйста, найдите вывод ниже:

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, я все равно получаю ту же ошибку. Команда для проверки инструмента после сборки докера выглядит следующим образом: (1) cd в каталог cppgrep, например code/cppgrep(2) войдите в Docker-контейнер и смонтируйте папку под /home:$ docker run -it -v $PWD:/home clang (3) запустите cppgrep, используя ./cppgrep 'x' test.cpp команда. Предполагается возвращать функции и переменные с именем x.

Чтобы воспроизвести ошибку, после загрузки и разархивирования файла из репозитория github создайте контейнер докера, используя $ docker build -t clang . команда. Затем выполните шаги 1,2,3 в вышеприведенном абзаце.

1 ответ

Решение

После пары дней борьбы, решил это!!

Мое первоначальное предположение о причине ошибки верно. Среда clang-llvm была недоступна для инструмента cppgrep, но я допустил ошибку, предоставив информацию о среде для инструмента 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, запустив ./cppgrep 'x' test.cpp или же ./cppgrep -help, Для использования других инструментов в этом докере, таких как ast-dump, mccabe и т. Д., Вы должны выполнить те же два шага, прежде чем использовать их.

Другие вопросы по тегам