Опция gcc Linkage -L: Альтернативные способы указания пути к динамической библиотеке - PullRequest
3 голосов
/ 30 июля 2010

Если я скомпилирую свой исходный код с «-L».динамическую библиотеку libmd5.so можно найти.

gcc main.c -g -O2 -Wall -o main -L. -lmd5 -lcr

Но если я оставлю опцию "-L." -, компоновщик не найдет динамическую библиотеку.Как я могу изменить это, не вызывая "-L."?

(дополнительная информация libmd5.so и libmd5.so.1.0.1 находятся в / home / user / ba)

Ответы [ 2 ]

8 голосов
/ 30 июля 2010

Нет ничего плохого в флаге -L, поэтому вам не следует так стараться избавиться от него - есть ли у вас проблемы во время выполнения, так как система не будет загружать библиотеки, на которые вы ссылаетесь? Вот несколько вариантов:

  • Добавьте / home / user / ba в /etc/ld.so.conf (или аналогичный для вашей ОС) и запустите ldconfig впоследствии. Это будет всей системы.
  • Установите переменную среды LIBRARY_PATH (для времени соединения) и LD_LIBRARY_PATH (для времени выполнения). export LD_LIBRARY_PATH=/home/user/ba и export LIBRARY_PATH=/home/user/ba. Это будет действовать только для текущей оболочки.
  • Установите rpath в исполняемом файле (здесь вам все равно нужен -L .) Добавьте -L /home/user/ba -Wl,-rpath,/home/user/ba к вашим флагам компоновщика. Это повлияет только на исполняемый файл, который вы создаете.
  • Поместите общие библиотеки в системный путь поиска библиотек, например /usr/lib. Это будет всей системы.

Вышесказанное действует и во время выполнения - оно попытается найти libmd5.so в / home / user / ba или других путях поиска в библиотеке системы, когда вы также запустите приложение.

1 голос
/ 30 июля 2010

вы можете установить переменную окружения LIBRARY_PATH.

export LIBRARY_PATH=/home/user/ba
...