В чем разница между -rpath и -L? - PullRequest
71 голосов
/ 13 декабря 2011

gcc и ld предоставляют множество способов указать путь поиска для библиотек, в том числе флаги -rpath и -L.Справочные страницы не показывают различий между этими двумя флагами, фактически говоря, каждый флаг добавляет библиотеку к пути поиска библиотеки.Тем не менее, кажется странным, что оба флага делают точно одно и то же.Каковы различия, если таковые имеются, между этими двумя вариантами?

1 Ответ

84 голосов
/ 13 декабря 2011

Вы, должно быть, читаете несколько устаревших копий справочных страниц (выделение добавлено):

-rpath = dir
Добавьте каталог в путь поиска библиотеки runtime .Это используется
при связывании исполняемого файла ELF с общими объектами.Все аргументы -rpath
объединяются и передаются компоновщику runtime , который
использует их для поиска общих объектов в runtime.

против

-L searchdir
--library-path = searchdir
Добавить путь searchdir в список путей, которые ld будет искать
архивных библиотек иСкрипты управления ld.

Итак, -L указывает ld, где искать библиотеки, с которыми можно ссылаться при компоновке.Вы используете это (например), когда строите против библиотек в вашем дереве сборки, которые будут помещены в обычные пути системных библиотек к make install.--rpath, с другой стороны, сохраняет этот путь внутри исполняемого файла, чтобы динамический компоновщик времени выполнения мог найти библиотеки.Вы используете это, когда ваши библиотеки находятся вне пути поиска системной библиотеки.

...