Подтвердить что ты не робот

Имеет ли значение порядок -l и -L в компоновке GNU?

Опция -l говорит компоновщику искать библиотеки в стандартных каталогах. А с помощью -l мы можем указать наши собственные каталоги библиотек для поиска.

Вопрос: Имеет ли значение порядок порядка и для опции -l, как это имеет значение для -l с компоновщиком?

Эта ссылка: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html мало что говорит о последовательности -l.

РЕДАКТИРОВАТЬ Также,

Каталоги, указанные в командной строке, ищутся перед каталогами по умолчанию

это из справочной страницы (как указано Дмитрием), означает ли это, что даже если я укажу порядок как:

gcc -lm hello.c -Lx

все же каталогу, указанному с -l будет отдано предпочтение в первую очередь?

4b9b3361

Ответ 1

Да, порядок -L имеет значение - так же, как -L и -I.

От man ld

-Lsearchdir
- библиотека-путь = searchdir

Добавьте путь searchdir в список путей, в которых ld будет искать архивные библиотеки и ld-скрипты управления. Вы можете использовать эту опцию любое количество раз. Поиск каталогов осуществляется в том порядке, в котором они указаны в командной строке. Каталоги, указанные в командной строке, просматриваются перед каталогами по умолчанию. Все опции -L применяются ко всем параметрам -l независимо от порядка отображения параметров.

Документация GCC и более конкретно Параметры привязки будет полезен для вас

Edit
Извините, я действительно пропустил, чтобы проверить ссылку, которую вы указали. "man ld" можно просто записать в консоли.

Edit2
Я сделал простой тест -L перед параметрами -L, и он не показывает разницу по сравнению с -L до -L

Итак, отвечая на ваш второй вопрос, этот

gcc -lm hello.c -Lx

равно этому

gcc -Lx -lm hello.c

libm выполняется поиск сначала в каталоге x/в обоих тестах.

Обратите внимание, что размещение -l<lib> перед исходными файлами - это плохая практика, которая может привести к ссылкам undefined при связывании. Это правильный способ

gcc hello.c -Lx -lm