Опции линкера gcc: ld (Как указать путь поиска либ в рантайм?)

Модератор: Модераторы разделов

corporator
Сообщения: 10
ОС: OpenSUSE 11.1, 11.2

Опции линкера gcc: ld

Сообщение corporator »

Здравствуйте, уважаемые форумчане!

Столкнулся с проблемой, бился над ней несколько дней, но решить не смог.

Теперь конкретно.




Я компилирую программу (httrack-3.43.7) на c++ (gcc-3.3.3) , но хочу при этом, чтобы во время выполнения программа искала библиотеки в нестандартных местах (то есть не в /lib и /usr/lib, а в /lib и /pkg/lib). Вроде бы задача тривиальная, но решить не смог :(

(если это важно, компилирую на кросс-компиляторе под ARM9 с поддержкой soft-float)

Что делал:

Указывал в LDFLAGS="-rpath" , устанавливая LD_RUN_PATH="/pkg/lib" но при сборке libtool ругался на какой-то статичный путь.

Указывал в LDFLAGS="-L/pkg/lib" , сборка завершалась успешно, но прога за либами ходила в /lib и /usr/lib

Указывал в CXXFLAGS="-Wl,-rpath -Wl,-L/pkg/lib", всё равно за либами ломится в /lib и /usr/lib




Кто-нибудь может что-то подсказать по этому поводу?

P.S. LD_LIBRARY_PATH пользоваться не хочу.
Если ты чего-нибудь хочешь, вся Вселенная будет способствовать тому, чтобы желание твое сбылось.
Пауло Коэльо "Алхимик"
Спасибо сказали:
Аватара пользователя
fbi
Сообщения: 34

Re: Опции линкера gcc: ld

Сообщение fbi »

P.S. LD_LIBRARY_PATH пользоваться не хочу.

А как вы хотите? При сборке путь вы указали, а при запуске ясен пень она у вас ничего не найдет!
В папке /etc/ld.so.conf.d/ создайте conf файл с путем к вашим либам, и выполните ldconfig
Спасибо сказали:
Аватара пользователя
destr
Сообщения: 128
ОС: Debian

Re: Опции линкера gcc: ld

Сообщение destr »

А что с rpath не так?
Спасибо сказали:
corporator
Сообщения: 10
ОС: OpenSUSE 11.1, 11.2

Re: Опции линкера gcc: ld

Сообщение corporator »

Решил проблему довольно просто.
LDFLAGS="-L/pkg/lib"
LD_RUN_PATH и LD_LIBRARY_PATH не установлены.

Почему не заработало в 1й раз... возможно, не совсем прямыми руки были. :)

Скомпилил, собрал, находит все либы, но теперь столкнулся с другой проблемой.

На устройстве, под которое компилю есть 2 директории с библиотеками:
/lib
/pkg/lib

И несколько одинаковых библиотек (разные версии) в этих директориях.
Почему-то программа использует эти версии вперемешку (часть либ из 1й папки, часть из 2й) , судя по выводу ldd. И при запуске есть unresolved external. Как я понял, прога находит либу в /lib, не находит в ней нужной функции и ругается. Все рабочие либы лежат в /pkg/lib
Можно ли как-то сделать, чтобы программа не использовала /lib вообще ?
Если ты чего-нибудь хочешь, вся Вселенная будет способствовать тому, чтобы желание твое сбылось.
Пауло Коэльо "Алхимик"
Спасибо сказали:
Аватара пользователя
Omnifarious
Сообщения: 119
ОС: Gentoo x86_64

Re: Опции линкера gcc: ld

Сообщение Omnifarious »

А если так попробовать:

Код: Выделить всё

CXXFLAGS="-Wl,-rpath /pkg/lib"


Хотя с LD_LIBRARY_PATH, по-моему, правильнее.
There is more than one way to do it
Спасибо сказали:
Аватара пользователя
TuxWare
Сообщения: 637
ОС: Windows 7

Re: Опции линкера gcc: ld

Сообщение TuxWare »

corporator писал(а):
17.11.2009 22:51
Указывал в CXXFLAGS="-Wl,-rpath -Wl,-L/pkg/lib", всё равно за либами ломится в /lib и /usr/lib

чо за ересть
-Wl,-rpath -Wl,/pkg/lib
-Wl,-rpath,/usr/local/Trolltech/Qt-4.6.x/lib
Спасибо сказали:
corporator
Сообщения: 10
ОС: OpenSUSE 11.1, 11.2

Re: Опции линкера gcc: ld

Сообщение corporator »

Всё равно получаю результат на девайсе:

root@STORAGE:/mnt/HD_a2# ldd /pkg/bin/httrack
libpthread.so.0 => /pkg/lib/libpthread.so.0 (0x4000d000)
libhttrack.so.2 => /pkg/lib/libhttrack.so.2 (0x40027000)
libz.so.1 => /pkg/lib/libz.so.1 (0x40122000)
libfloat.so.1 => /pkg/lib/libfloat.so.1 (0x4013f000)
libc.so.0 => /pkg/lib/libc.so.0 (0x4015e000)
libgcc_s.so.1 => /pkg/lib/libgcc_s.so.1 (0x401b9000)
libdl.so.0 => /lib/libdl.so.0 (0x401cb000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x40000000)


Как избавиться от мешанины либ?
Обе выделенные библиотеки есть в /pkg/lib/

root@STORAGE:/mnt/HD_a2# httrack
httrack: can't resolve symbol '_dl_app_init_array'


TuxWare
Проблему поиска я решил, сейчас никак не могу решить проблему unresolved symbol, однако, спасибо за подсказку.
Если ты чего-нибудь хочешь, вся Вселенная будет способствовать тому, чтобы желание твое сбылось.
Пауло Коэльо "Алхимик"
Спасибо сказали:
Аватара пользователя
TuxWare
Сообщения: 637
ОС: Windows 7

Re: Опции линкера gcc: ld

Сообщение TuxWare »

Давайте вывод создаваемый make.
_dl_app_init_array - в какой библиотеке сидит?
Спасибо сказали: