связывание библиотек -rpath LD_LIBRARY_PATH - PullRequest
4 голосов
/ 29 октября 2009

У меня есть некоторые сторонние библиотеки и включает в себя (я скопировал их в этот каталог / usr / ssd / include и / usr / ssd / lib), которые мне нужно связать с моим приложением. Я только что создал тестовое приложение, чтобы увидеть, могу ли я ссылаться нормально. Однако при попытке запустить приложение я получаю следующее сообщение.

./app: error while loading shared libraries: libssdn.so: cannot open shared object file: No such file or directory

В командной строке я собираю так:

gcc -g -Wall -I/usr/ssd/include -L/usr/ssd/lib -lssdn test_app.c -o app

Все компилируется нормально, так как я не получаю никаких предупреждений или ошибок. Тем не менее, я получаю сообщение об ошибке при попытке запустить приложение.

В usr / ssd / lib библиотека называется libssdn.so

Я искал решение и прочитал кое-что о -rpath, -Wl и LD_LIBRARY_PATH, но не уверен, что они есть и как их включить, когда я компилирую.

Я использую Ubuntu 9.04 Linux,

Спасибо за любой совет,

Ответы [ 2 ]

3 голосов
/ 29 октября 2009

Проверьте, помогает ли добавление / usr / ssd / lib к вашему $ LD_LIBRARY_PATH:

В оболочке:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/ssd/lib

Если это решит проблему, сделайте ее постоянной, добавив / usr / ssd / lib в /etc/ld.so.conf или запустив

ldconfig -n /usr/ssd/lib
2 голосов
/ 29 октября 2009

Мое личное предпочтение не состоит в том, чтобы помещать местоположение разделяемого объекта в исполняемый файл (что и делал бы -rpath).

Вместо этого вы должны добавить / usr / ssd / lib к вашему LD_LIBRARY_PATH во время выполнения. Предполагая, что вы используете bash или оболочку, похожую на bash, выполните:

export LD_LIBRARY_PATH=/usr/ssd/lib:${LD_LIBRARY_PATH}

и как только вы это сделаете, вы можете запустить свой исполняемый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...