Связывание с другим .so файлом в linux - PullRequest
0 голосов
/ 10 сентября 2009

Я пытаюсь скомпилировать часть программного обеспечения со стандартным процессом сборки, например,

configure
make
make install

Для программного обеспечения требуется библиотека, например libreq.so, который установлен в / usr / local / lib. Однако моя проблема заключается в том, что я хотел бы собрать программное обеспечение и связать его с другой версией той же библиотеки (у меня также есть источник для библиотеки), которую я установил в /home/user/mylibs.

Мой вопрос: как мне скомпилировать и связать программное обеспечение с библиотекой в ​​/ home / user / mylibs, а не с / usr / local / lib

Я пытался установить "LD_LIBRARY_PATH" для включения / home / user / mylibs, но это не сработало.

Спасибо!

Ответы [ 4 ]

5 голосов
/ 10 сентября 2009

Если у вас есть autoconf скрипт настройки, используйте:

CPPFLAGS=-I/home/user/include LDFLAGS=-L/home/user/mylibs ./configure ...

Это добавляет номинированный каталог в список каталогов, в которых выполняется поиск заголовков (обычно это необходимо при использовании библиотеки), и добавляет другой номинированный каталог в список искомых библиотек.

Я использую это все время - на моей рабочей машине /usr/local 'поддерживается' MIS и содержит устаревший код в 99,9% случаев (и монтируется NFS, только для чтения), поэтому я стараюсь избегать использовать его вообще и поддерживать мои собственные, более актуальные версии программного обеспечения под /usr/gnu. У меня это работает.

2 голосов
/ 10 сентября 2009

Попробуйте использовать LD_PRELOAD , установленный на ваш фактический файл.

0 голосов
/ 10 сентября 2009

Когда вы добавили /home/user/mylibs к LD_LIBRARY_PATH, вы добавили его в начало или конец существующих путей? Токены ищутся по порядку, поэтому вы захотите, чтобы ваши токены появились первыми в списке.

Кроме того, многие стандартные среды сборки, использующие configure, позволят вам указать точную библиотеку для каждого необходимого фрагмента. Вам нужно будет запустить ./configure --help, но вы должны увидеть что-то вроде --using-BLAH-lib=/path/to/your/library или подобное.

0 голосов
/ 10 сентября 2009

LD_LIBRARY_PATH для поиска динамических библиотек во время выполнения. При компиляции вы должны добавить параметры -L в gcc / g ++, чтобы указать, в каком каталоге находятся файлы * .so. Вам также необходимо добавить имя библиотеки с -l (где библиотека - libNAME.so).

Внимание! Для компоновки вам нужен не только файл libNAME.so, но и libNAME.a.

Когда вы запускаете приложение, не забудьте добавить каталог в LD_LIBRARY_PATH.

...