PDA

Показать полную графическую версию : Проблема компиляции SHARED библиотек


Midnight-Ghost
11-08-2008, 06:56
Здравствуйте!
Помогите плииз. Использую Кдевелоп 3. Пишу программу с шаред библиотеками. Там КДевелоп предлагает использовать для этого CMake(CMakeList.txt): #add definitions, compiler switches, etc.
ADD_DEFINITIONS(-Wall -O2 -L)

#build a shared library
ADD_LIBRARY(test2 SHARED test2.cpp)

#for testing the shared library you probably need some test app too
ADD_EXECUTABLE(test2test test2test.cpp)

#need to link to some other libraries ? just add them here
TARGET_LINK_LIBRARIES(test2test test2)
(Это содержимое файла с настройками для компиляции. Всё вроде работает, но проблема в том, что стоит переместить программу в другую папку или на другой комп, как она тупо начинает искать библиотеки программы в той самой папке, где был проект программы.
Как сделать, чтоб шаред библиотека была бы либо в под папке либо в той же пепке где исполняемый файл(Не была бы привязана к абсолютному адрессу)

Умоляю помогите! Плииииз!
Вот пример(список файлов):

[root@localhost Temp]# ls
ElDorado/ libtest2.so* test2test*

и вот собсно проблема:

[root@localhost Temp]# ./test2test
./test2test: error while loading shared libraries: libtest2.so: cannot open shared object file: No such file or directory
[root@localhost Temp]#

Библиотека под носом, но экзешник её не видит, а ищет в другом месте

BuGfiX
11-08-2008, 11:58
Попробуйте перед запуском программы выполнить:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./

Midnight-Ghost
11-08-2008, 12:41
Заработало. Но только на один раз. После закрытия консоли снова тоже самое. Что эта команда делает? Можно ли как-то исправить сам процесс компиляции?

BuGfiX
11-08-2008, 13:31
Не скажу как с этим борется kdevelop, а вот система ищет библиотеки по путям, прописанным в файле /etc/ld.so.conf. Вы можете скопировать нужную библиотеку в одну из этих директорий (либо создать симлинк) и выполнить ldconfig.

Midnight-Ghost
13-08-2008, 23:33
Вопрос такого плана, я точно знаю, что многие программы работают по принципу, что если никак найти библиотеку, то она ищет её в той же директории, что и экзешник. Вот к стати пример: есть такой ZenEncoder. К нему прилагаются библиотеки декодера. и просто достаточно их залить в папку со скриптом и всё работает

BuGfiX
14-08-2008, 11:17
Возможно, скрипт тоже экспортирует переменную LD_LIBRARY_PATH ?




© OSzone.net 2001-2012