Я строю программу, которая связывает некоторые общие библиотеки. Они содержатся в каталоге lib / относительно моего проекта.
У меня проблема в том, что я хотел бы, чтобы исполняемый файл знал, чтобы искать библиотеки в соответствующем каталоге ../lib. Это возможно?
Я действительно не хочу изменять ld_library_path или перемещать файлы в один из стандартных корневых путей.
Я могу скомпилировать исполняемый файл и запустить его, когда файлы .so находятся по одному из стандартных путей, показанных с помощью strace / ldd
Вы можете использовать -rpath
из компоновщика (используя ld в качестве компоновщика).
С его страницы руководства:
-RPATH = каталог
Добавьте каталог в путь поиска библиотеки времени выполнения. Это используется при связывании исполняемого файла ELF с общими объектами. Все аргументы -rpath объединяются и передаются компоновщику среды выполнения, который использует их для поиска общих объектов во время выполнения. Опция -rpath также используется при поиске общих объектов, которые необходимы для общих объектов, явно включенных в ссылку; см. описание опции -rpath-link. Если -rpath не используется при связывании исполняемого файла ELF, будет использоваться содержимое переменной среды «LD_RUN_PATH», если оно определено.