Описание тега rpath
Rpath - это опция, используемая компоновщиком времени выполнения в Unix и Linux (ld.so) для вставки заголовка RPATH либо в двоичные файлы, либо в общие библиотеки. Этот заголовок определяет порядок поиска по пути для поиска библиотек.
Заголовок RPATH имеет тот же формат, что и переменная PATH оболочки, это список каталогов, разделенных двоеточиями. Можно использовать несколько специальных тегов, которые выглядят как переменные оболочки, но на самом деле являются специальными командами для загрузчика разделяемой библиотеки.
Чаще всего используется $ORIGIN, который равен текущему каталогу, в котором находится двоичная или разделяемая библиотека.
Например, если у меня есть./x/bin/myprog и./x/lib/libstuff.so.0, то я могу убедиться, что myprog находит libstuff, установив для заголовка RPATH значение $ORIGIN/../lib. Но если libstuff зависит от libz, он найдет это в / lib или / usr / lib. Однако, если я также установил заголовок RPATH в libstuff.so.0 из $ORIGIN, тогда он сначала будет искать libz в./x/lib. Поэтому я могу скопировать libz в./x/lib, а также скопировать libstuff.so.0 в то же место и изменить его RPATH.
Если вы создаете и связываете программное обеспечение, вы можете управлять заголовком RPATH с помощью параметра -rpath. В Linux вы также можете использовать программу с именемpatchelf
исправить это постфактум. Эквивалент Solaris:elfedit
. Чтобы проверить текущий заголовок RPATH, запуститеreadelf -d libtest.so
в Linux или elfdump -d libtest.so
Установка RPATH - это вежливый поступок для автономного приложения, которое необходимо распространять среди пользователей, поскольку это помогает устранить возможность поиска неправильных версий библиотек.