LINUX.ORG.RU

export LD_LIBRARY_PATH=/home/temofey/lib

justme
()

2 temofey:

Ты случайно не автор программы abacus_counter?

Могу сказать, что переменная среды $LD_LIBRARY_PATH содержит пути, в которых исполняемая система Unix будет искать динамические библиотеки (файды *.so.*) если их не найдёт в стандартных местах.

А для компиляции с программой статической либы (файл *.a) нужно использовать ключ -L компилятора/компановщика. Например:

g++ -o prog f1.o f2.o -lyourlib -L $HOME/usr/local/lib

Android (*) (2001-10-31 11:52:53.0)

Android
()

2 temofey:

Ты случайно не автор программы abacus_counter?

Могу сказать, что переменная среды $LD_LIBRARY_PATH содержит пути, в которых исполняемая система Unix будет искать динамические библиотеки (файды *.so.*) если их не найдёт в стандартных местах.

А для компиляции с программой статической либы (файл *.a) нужно использовать ключ -L компилятора/компановщика. Например:

g++ -o prog f1.o f2.o -lyourlib -L $HOME/usr/local/lib

Android
()

Есть $LD_PRELOAD по моему.

Havoc ★★★★
()

Мужики, все вы чего то недоговорили. Дело обстоит так:

Нужную либу ищет динамический линкер (например /lib/ld-2.2.4.so, на который линкуются все программы котрые используютя шаред библиотеки) при старте программы. Для поиска он руководствуется содержимым файла /etc/ld.so.cash, в котором информация о том где и какие библиотеки находятся.

Чтобы посмотреть это можно воспользоваться: strings /etc/ld.so.cash

Есть такой файлик ld.so.conf, в котором прописываются пути к нестандартным местам где лежат библиотеки. У меня это /usr/local/lib, /usr/X11R6/lib.

Програмка ldconfig, котороя апдейтит кеш добавляет в него и стандартные пути. То есть /lib, /usr/lib.

Программу можно скомпилить с конкретным rpath-ом. Местом где она будет искать библиотеки (см. man gcc).

Переменная окружения LD_LIBRARY_PATH также используется для указания нестандартных мест. Но она на мой взгляд нужна больше различным вроперам. Например мозилла имеет скрипт mozilla, который прописывает коректный путь к ее библиотекам, а потом запускает свой бинарник.

В LD_PRELOAD прописывают не пути где лежат библиотеки, а сами библиотеки. Эти библиотеки загружаются динамическим линкером в первую очередь. Таким образом динамический линкер будет находить все функции которые в них раньше всех. Это используется например для переопределения каких нибудь библиотечных функций без переписывания и перекомпиляции. Например глючит функция malloc на AIX. Делают маленькую библиотечку, которая эту функцию реализет подругому и пихают в LD_PRELOAD. Все программы начинают нормально работать. Еще этот подход использовался для реализации антиалиасинга в ГНОМЕ. То есть была переписана чать gdk.

g++ -o prog f1.o f2.o -lyourlib -L $HOME/usr/local/lib такая команда слинкует не со статической, а с динамической либой. Да и слинкует ли вообще.

Нужно g++ -o prog f1.o f2.o -Wl,Bstatic -lyourlib -Wl,Bdynamic -L/home/temofey/lib

Banshee
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.