Я пытаюсь построить программу на C ++ с использованием Unix.
Я получил ошибку
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
Я слышал, что мне просто нужно установить местоположение libboost * в моей переменной env LD_LIBRARY_PATH, а затем вызвать make, как я это делал изначально, набрав
-L /usr/lib64 -l boost_regex-mt
или
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Но где же LD_LIBRARY_PATH? как установить переменную env LD_LIBRARY_PATH?
Ответы:
Вы уже установили его, когда сделали это:
Но это не решит вашу проблему.
$LD_LIBRARY_PATH
консультируется во время выполнения, чтобы предоставить список дополнительных каталогов, в которых можно искать динамически подключаемые библиотеки. С ним не консультируются во время компоновки (за исключением, может быть, поиска библиотек, необходимых самим встроенным инструментам!).Чтобы указать компоновщику, где искать библиотеки во время сборки, необходимо использовать параметр
-L
компоновщика. Вы уже сделали это тоже:Если вы по-прежнему получаете сообщение об ошибке, вам необходимо убедиться, что библиотека действительно есть. У вас есть файл
libboost_regex-mt.so
илиlibboost_regex-mt.a
в этом (или любом) каталоге? Обратите внимание, что файл какlibboost_regex-mt.so.othersuffix
не считается для этой цели. Если у вас его нет, вам, вероятно, нужно установить пакет разработки вашего дистрибутива для этой библиотеки.источник
$LD_LIBRARY_PATH
также обращаются кld
: «5. Для нативного компоновщика найдите содержимое переменной окружения" LD_LIBRARY_PATH ". »ld
man- страницы касается только рекурсивных зависимостей: зависимых библиотек библиотеки, которая уже была выбрана для связи. Это не касается поиска библиотек для исполняемого исполняемого файла. Вот что-L
делает.apt-get
команда не найдена, значит, она не является производной от Debian, поэтому вам нужен другой метод для установки отсутствующего пакета. Это определенно то, что ваша проблема, хотя.-Ldir -llib
должно работать как аргументыld
илиgcc/g++/etc
когда включается фаза соединения, но упоминается оригинальный и восстановленный Qmake
: с нормальным make-файлом, который вам, вероятно, нужен,LDFLAGS="whatever"
и с умным make-файлом, вам может понадобиться почти все, включая кирпичи, чтобы бросить умному автору make-файла.Еще один способ постоянного добавления нового пути в LD_LIBRARY_PATH:
Редактировать
.conf
файл в/etc/ld.so.conf.d/
.Я когда-либо устанавливал приложение, и его библиотеки не могли быть распознаны другим приложением. Затем я добавляю путь, т.е.
/usr/local/hdf5/lib
кx86_64-linux-gnu.conf
файлу. Просто вставьте следующую строку. Сохранить.Тогда беги
sudo ldconfig
Это сработало.
PS: ОС Ubuntu 14.04
источник
Вы можете установить его в своем
~/.profile
и / или определенном файле инициализации вашей оболочки (например,~/.bashrc
для bash,~/.zshenv
для zsh). Затем вам нужно перезапустить вашу оболочку (и, возможно, выйти из системы и войти снова, в зависимости от вашего выбора).Вы можете проверить свои настройки с помощью:
РЕДАКТИРОВАТЬ:
LD_LIBRARY_PATH
для общих библиотек, которые содержат машинный код, имена файлов которого обычно содержат.so
в своем имени, возможно, после которых следуют числа, разделенные точками, чтобы различать разные версии. Возможно, что несмотря наLD_LIBRARY_PATH
это, библиотека не найдена из-за несоответствия ABI. Также обратите внимание, что языки (такие как Perl и Python) и пакеты могут иметь свою собственную систему библиотек (возможно, также с.so
файлами), не связанную сLD_LIBRARY_PATH
.источник
LD_LIBRARY_PATH
(чтобы избежать столкновений с обычными библиотеками). Для этого вам нужно задать конкретный вопрос с сообщением об ошибке, которое вы получите.Если ваша ошибка пути к библиотеке находится в компоновщике, во время компиляции вам нужно добавить путь к библиотеке в переменную $ LD_LIBRARY_PATH. Если ошибка библиотеки связана с тем, что вы фактически запускаете скомпилированную программу, вам нужно добавить путь к библиотеке в /etc/ld.so.conf и запустить ldconfig, чтобы перестроить кэш пути поиска библиотеки.
источник
Решено с:
добавить в
/etc/systemd/system/pm2-node.service
источник