#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, чтобы заставить это работать без наличия библиотеки в кэше общих объектов