Имеет ли значение порядок параметров -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