Имеет ли значение порядок параметров -l и -L в компоновщике GNU? - PullRequest
19 голосов
/ 28 апреля 2011

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

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

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

EDIT Также,

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

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

gcc -lm hello.c -Lx

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

1 Ответ

15 голосов
/ 28 апреля 2011

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

От man ld

-Lsearchdir
- library-path = searchdir

Добавить path 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...