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

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

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

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

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

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

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

gcc -lm hello.c -Lx

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

1 ответ

Решение

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

От man ld

-Lsearchdir
--library-путь =searchdir

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

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

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

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

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

gcc -lm hello.c -Lx

равно этому

gcc -Lx -lm hello.c

libm ищется первым в каталоге x/ в обоих тестах.

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

gcc hello.c -Lx -lm 
Другие вопросы по тегам