В Windows исполняемый файл (.exe
), которому требуется общая библиотека (.dll
), можно запускать, когда файлы exe и dll находятся в одном каталоге.
В Linux, даже еслиИсполняемый файл и разделяемая библиотека (.so
) находятся в одном и том же каталоге, Linux всегда ищет его в абсолютном каталоге, в котором впервые был создан .so, а затем не запускает исполняемый файл.
Установка LD_LIBRARY_PATH
илиRPATH
Переменная среды перед запуском исполняемого файла является специальным решением, но я хочу сделать это без установки переменной среды и заставить ее вести себя как Windows.
Как я могу это сделать?Я добавил "-rpath=$ORIGIN"
в CMakelists , но он все равно не работает.
Для экспериментов я создал простую программу и другую общую библиотеку и попробовал dlopen
, и она работает, как я хотел.Однако я не использую dlopen
для этого случая.