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

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

1 ответ

Решение

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

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

против

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

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

Другие вопросы по тегам