В чем разница между-rpath и-L?


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

1 66

1 ответ:

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

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

и

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

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