Вы можете получить представление о том, какие аргументы 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}}
Надеюсь, что ответ на ваш вопрос.