Эквивалент RPATH для исполняемых файлов - PullRequest
0 голосов
/ 31 марта 2011

У меня есть общая библиотека c ++, которая как часть своего обычного поведения fork () / execs () - другой исполняемый файл, содержащий нестабильный устаревший код. Этот исполняемый файл бесполезен, кроме как с этой библиотекой, поэтому я хотел бы не помещать его в каталог PATH. Я также хотел бы иметь возможность устанавливать несколько копий в разных местах, поэтому жестко закодированные пути нежелательны. Есть ли что-нибудь эквивалентное RPATH, которое позволит exec () найти этот исполняемый файл? Альтернативно, возможно ли запросить путь к общей библиотеке из самой библиотеки?

Редактировать: Этот пост предполагает, что последнее возможно. Я оставлю это открытым, если кто-нибудь знает ответ на заданный вопрос. Есть ли способ проверить текущий rpath в Linux?

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Вы всегда можете использовать getenv, чтобы получить среду в общем объекте, но действительно ли RPATH то, что вы хотите использовать для этого? Разве не было бы лучше, чтобы общий объект имел какой-то файл конфигурации в домашнем каталоге пользователя (или пользовательскую переменную среды), который сообщает ему, какое расположение использовать для запуска внешнего двоичного файла?

0 голосов
/ 15 июня 2011

Я думаю, что лучший способ сделать это - установить переменную окружения и использовать execve() для запуска двоичного файла. Предположительно, вы можете просто установить PATH, а затем execve() оболочку, которая будет использовать PATH для поиска копии исполняемого файла. Эквивалент библиотеки должен был бы установить LD_LIBRARY_PATH и execve() двоичный файл, который имеет эту библиотеку в качестве зависимости.

В любом случае вы не изменяете внешнюю среду, а только производите измененную копию, которая используется с execve().

...