/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 и т. Д., Вы должны выполнить те же два шага, прежде чем использовать их.