Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Проблема компиляции SHARED библиотек (http://forum.oszone.net/showthread.php?t=114062)

Midnight-Ghost 11-08-2008 06:56 872692

Проблема компиляции SHARED библиотек
 
Здравствуйте!
Помогите плииз. Использую Кдевелоп 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 872823

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

Midnight-Ghost 11-08-2008 12:41 872854

Заработало. Но только на один раз. После закрытия консоли снова тоже самое. Что эта команда делает? Можно ли как-то исправить сам процесс компиляции?

BuGfiX 11-08-2008 13:31 872891

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

Midnight-Ghost 13-08-2008 23:33 874814

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

BuGfiX 14-08-2008 11:17 875042

Возможно, скрипт тоже экспортирует переменную LD_LIBRARY_PATH ?


Время: 07:16.

Время: 07:16.
© OSzone.net 2001-