Какие виды библиотек не нужно указывать в GCC? - PullRequest
2 голосов
/ 15 июня 2011

Мне было интересно, какие виды библиотек, используемых в коде, не нужно указывать в команде gcc?Является ли /usr/lib/libc.a единственным?

Какие библиотеки необходимо указать для gcc?

Спасибо и всего наилучшего!

1 Ответ

4 голосов
/ 15 июня 2011

Вы можете получить представление о том, какие аргументы gcc автоматически передает компоновщику, используя переключатель -dumpspecs.Например, на моей установке Windows 7 с MinGW, используя:

gcc -dumpspecs | less 

в разделе libgcc, он показывает:

*libgcc:
%{mthreads:-lmingwthrd} -lmingw32  %{shared-libgcc:-lgcc_s} -lgcc -lmoldname -lmingwex -lmsvcrt

, которые предполагают, что эти библиотеки передаются компоновщику ld, если я явно не запрещаюэто с вариантами как nodefaultlibs или nostdlib.Ваша дамп-спецификация gcc будет выглядеть по-разному в зависимости от хост-платформы, ОС и цели, с которой она была настроена для работы.

Редактировать: Чтобы помочь ответить на вопросы в комментарии Тима.

В соответствии с gcc docs значения строк спецификации lib и libgcc следующие:

 lib          Libraries to include on the command line to the linker
 libgcc       Decides which GCC support library to pass to the linker

Насколько я понимаю, передаются как lib, так и libgccкомпоновщику по умолчанию.В следующей части я не очень уверен, поэтому кто-то, пожалуйста, исправьте, если я ошибаюсь, если параметры, такие как nodefaultlib, будут переданы, то будет применена только строка спецификации lib, но libgcc не будет.

Я только что проверил dumpspec для gcc 4.4.x в Ubuntu, работающем под virtual-box, и оказалось, что библиотека libc включена в строку спецификации lib.

*lib:
%{pthread:-lpthread}    %{shared:-lc}    %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}

Надеюсь, что ответ на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...