2010-06-09 2 views
3

Я знал, что мне нужно использовать опцию -l для удобства объектов с использованием GCC. Это gcc -o test test.c -L./ -lmyДва метода связывания объекта с помощью GCC?

Но я обнаружил, что работает «gcc -o test2 test.c libmy.so».

Когда я использую readelf для этих двух исполняемых файлов, я не могу найти разницы. Тогда почему люди используют -l вариант для связывания объектов? Имеет ли он какое-либо преимущество?

ответ

4

Поскольку у вас может быть статическая или общая версия библиотеки в каталоге вашей библиотеки, e. г. libmy.a и libmy.so, или оба из них. Это более актуально для системных библиотек: если вы ссылаетесь на библиотеки в своем локальном дереве сборки, вы знаете, какая версия вы создаете, статическую или общую, но вы не можете смешивать конфигурацию и библиотеки других систем.

В дополнение к этому, some platforms may have different suffixes. Так что лучше указать его каноническим способом.

0

Основная причина в том, что -lname будет искать libname.a (или libname.so и т. Д.) В списке поиска библиотеки . Вы можете добавить каталоги в список поиска библиотеки с параметром -L. Это удобство, встроенное в программу драйвера компилятора, что упрощает поиск библиотек, которые были установлены в стандартных местах в системе.

Смежные вопросы