gcc
и ld
предоставляют множество способов указать путь поиска для библиотек, среди которых флаги -rpath
и -L
. В manpages нет различий между этими двумя флагами, эффективно говоря, что каждый флаг добавляет библиотеку в путь поиска библиотеки. Тем не менее, кажется странным, что оба флажка делают то же самое. Каковы различия, если таковые имеются, между этими двумя параметрами?
Какая разница между -rpath и -L?
Ответ 1
Вы должны прочитать некоторые устаревшие копии файлов (выделено мной):
-rpath = каталог
Добавьте каталог в путь поиска библиотеки runtime. Это используется
при связывании исполняемого файла ELF с общими объектами. Все -rpath
аргументы конкатенированы и передаются в компоновщик времени выполнения, который использует их для поиска общих объектов в среде выполнения.
против.
-L searchdir
--library-путь = searchdir
Добавить путь searchdir в список путей, в которых ld будет искать
архивные библиотеки и ld-скрипты управления.
Итак, -L
сообщает ld
, где искать библиотеки для ссылок при связывании. Вы используете это (например), когда вы строите против библиотек в дереве сборки, которые будут помещены в обычные пути к системной библиотеке на make install
. --rpath
, с другой стороны, сохраняет этот путь внутри исполняемого файла, так что динамический компоновщик времени выполнения может находить библиотеки. Вы используете это, когда ваши библиотеки находятся вне пути поиска системной библиотеки.