Загрузка общей библиотеки в один каталог с исполняемым файлом - PullRequest
0 голосов
/ 07 февраля 2019

В Windows исполняемый файл (.exe), которому требуется общая библиотека (.dll), можно запускать, когда файлы exe и dll находятся в одном каталоге.

В Linux, даже еслиИсполняемый файл и разделяемая библиотека (.so) находятся в одном и том же каталоге, Linux всегда ищет его в абсолютном каталоге, в котором впервые был создан .so, а затем не запускает исполняемый файл.

Установка LD_LIBRARY_PATH илиRPATH Переменная среды перед запуском исполняемого файла является специальным решением, но я хочу сделать это без установки переменной среды и заставить ее вести себя как Windows.

Как я могу это сделать?Я добавил "-rpath=$ORIGIN" в CMakelists , но он все равно не работает.

Для экспериментов я создал простую программу и другую общую библиотеку и попробовал dlopen, и она работает, как я хотел.Однако я не использую dlopen для этого случая.

1 Ответ

0 голосов
/ 07 февраля 2019

Я нашел решение: добавьте параметр rpath в CMakelists.txt для исполняемого файла, не для общей библиотеки.

...