как происходит внешняя ссылка на dll в Linux

#linux #dll

#linux #dll

Вопрос:

Я запускаю приложение, которое использует библиотеку, которую я создал. Этот пример приложения создается с помощью файла make, который создает приложение как

 LIBNAME=/usr/local/App/lib/libMYLIB.so
  

$(CC) -o образец sample.o $(LIBNAME)

Я могу запустить приложение без установки LD_LIBRARY_PATH. Это ожидаемо?
Имеет ли к этому какое-то отношение использование полного пути в LIBNAME? возвращает пример ldd (среди других записей)

 /usr/local/App/lib/libMYLIB.so (0x00002aaaaaaad000)
  

Какие изменения мне нужно сделать, чтобы без установки переменной LD_LIBRARY_PATH env мое приложение не работало. Использование -lMyLIB с помощью cc?

Спасибо.

Комментарии:

1. Что касается возможности запуска приложения без установки LD_LIBRARY_PATH, то, скорее всего, этот путь к libMYLIB.so находится в /etc/ld.so.conf (или это различные загруженные дочерние файлы)

Ответ №1:

-L/usr/local/App/lib/ -lMYLIB это то, что вам нужно.

Может случиться так, что ссылка с полным именем библиотеки устанавливает «rpath», который в основном является своего рода LD_LIBRARY_PATH , который встроен в исполняемый файл. Вы можете проверить текущее значение rpath (если оно есть) с помощью chrpath <executable> .

Комментарии:

1. он не устанавливает RPATH по умолчанию

2. Вероятно, ему нужна опция -Wl,-rpath=/usr/local / App / lib link, чтобы заставить это работать без наличия библиотеки в кэше общих объектов