
Я пытаюсь создать программу на C++ с использованием Unix.
Я получил ошибку
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
Я слышал, что мне просто нужно указать местоположение libboost* в моей переменной окружения LD_LIBRARY_PATH, а затем вызвать make, как я делал изначально, набрав
-L /usr/lib64 -l boost_regex-mt
или
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Но где находится LD_LIBRARY_PATH? как мне задать переменную окружения LD_LIBRARY_PATH?
решение1
как установить переменную окружения LD_LIBRARY_PATH?
Вы уже установили это, когда сделали это:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Но это не решит вашу проблему. $LD_LIBRARY_PATH
консультируется во время выполнения, чтобы предоставить список дополнительных каталогов, в которых можно искать динамически подключаемые библиотеки. Он не консультируется во время компоновки (за исключением, может быть, поиска библиотек, необходимых самим встроенным инструментам!).
Чтобы указать компоновщику, где искать библиотеки во время сборки, нужно использовать -L
опцию компоновщика. Вы уже сделали и это:
-L /usr/lib64
Если ошибка все еще возникает, то вам нужно убедиться, что библиотека действительно там. У вас есть файл libboost_regex-mt.so
или libboost_regex-mt.a
в этом (или любом другом) каталоге? Обратите внимание, что файл типа libboost_regex-mt.so.othersuffix
не считается для этой цели. Если у вас его нет, то вам, вероятно, нужно установить пакет разработки вашего дистрибутива для этой библиотеки.
решение2
Другой способ навсегда добавить новый путь в LD_LIBRARY_PATH:
Редактировать .conf
файл в формате /etc/ld.so.conf.d/
.
Я когда-либо устанавливал приложение, и его библиотеки не могли быть распознаны другим приложением. Тогда я добавляю путь, например /usr/local/hdf5/lib
, к x86_64-linux-gnu.conf
файлу. Просто вставьте следующую строку. Сохранить.
Тогда бегиsudo ldconfig
Это сработало.
P.S.: ОС Ubuntu 14.04
решение3
Вы можете установить его в вашем ~/.profile
и/или определенном файле init вашей оболочки (например, ~/.bashrc
для bash, ~/.zshenv
для zsh). Затем вам нужно перезапустить оболочку (и, возможно, выйти из системы и войти снова, в зависимости от вашего выбора).
Вы можете проверить свои настройки с помощью:
env | grep '^LD_LIBRARY_PATH'
EDIT: LD_LIBRARY_PATH
для общих библиотек, содержащих машинный код, имена файлов которых обычно содержат .so
в своем имени , возможно, за которым следуют числа, разделенные точками, чтобы различать разные версии. Возможно, что несмотря на LD_LIBRARY_PATH
, библиотека не найдена из-за несоответствия ABI. Обратите внимание также, что языки (например, Perl и Python) и пакеты могут иметь свою собственную систему библиотек (возможно, также с .so
файлами), не связанную с LD_LIBRARY_PATH
.
решение4
Решено с помощью:
добавить в/etc/systemd/system/pm2-node.service
Environment=PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/app/nodejs/local/nvm/versions/node/v7.8.0/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/node/.pm2
Environment=LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
Environment=OCI_LIB_DIR=/opt/oracle/instantclient_12_2