где находится LD_LIBRARY_PATH? как мне задать переменную окружения LD_LIBRARY_PATH?

где находится LD_LIBRARY_PATH? как мне задать переменную окружения LD_LIBRARY_PATH?

Я пытаюсь создать программу на 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

Связанный контент