Есть ли способ добавить относительный путь к библиотеке в исполняемый файл, чтобы избежать установки LD_LIBRARY_PATH

Я строю программу, которая связывает некоторые общие библиотеки. Они содержатся в каталоге lib / относительно моего проекта.

У меня проблема в том, что я хотел бы, чтобы исполняемый файл знал, чтобы искать библиотеки в соответствующем каталоге ../lib. Это возможно?

Я действительно не хочу изменять ld_library_path или перемещать файлы в один из стандартных корневых путей.

Я могу скомпилировать исполняемый файл и запустить его, когда файлы .so находятся по одному из стандартных путей, показанных с помощью strace / ldd

3

Решение

Вы можете использовать -rpath из компоновщика (используя ld в качестве компоновщика).

С его страницы руководства:

-RPATH = каталог

Добавьте каталог в путь поиска библиотеки времени выполнения. Это используется при связывании исполняемого файла ELF с общими объектами. Все аргументы -rpath объединяются и передаются компоновщику среды выполнения, который использует их для поиска общих объектов во время выполнения. Опция -rpath также используется при поиске общих объектов, которые необходимы для общих объектов, явно включенных в ссылку; см. описание опции -rpath-link. Если -rpath не используется при связывании исполняемого файла ELF, будет использоваться содержимое переменной среды «LD_RUN_PATH», если оно определено.

6

Другие решения


По вопросам рекламы [email protected]