2011-06-15 46 views

回答

4

您可以通过使用-dumpspecs开关了解gcc自动传递给链接器的参数。例如,在我的Windows 7安装程序与MinGW的使用:

gcc -dumpspecs | less 

下libgcc的部分它表明:

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

这表明这些库传递到LD连接,除非我明确地与类似的选项禁止它nodefaultlibsnostdlib。您的gcc dumpspec看起来会有所不同,具体取决于主机平台,操作系统和配置为使用的目标。

编辑:帮助回答Tim的评论中的问题。

按照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不会。

我刚刚在虚拟框下运行的Ubuntu上检查了gcc 4.4.x的dumpspec,看起来libc库被包含在lib spec字符串下。

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

希望能回答你的问题。

+0

谢谢! (1)libgcc和lib之间有什么区别?这两个部分下的库是否都默认链接? (2)标准C库是否默认链接? – Tim 2011-06-15 02:02:28

+0

@Tim我更新了我的答案;希望它能回答你的问题。 – greatwolf 2011-06-15 04:18:10

+0

谢谢! (1)“GCC支持库”是什么意思? GCC支持大多数图书馆吗? (2)“如果像nodefaultlib这样的选项被传入,那么只会使用lib规范字符串,但libgcc不会。”你的意思是我们只能删除“lib”部分中的默认库,而不是“libgcc”部分中的? – Tim 2011-06-15 12:56:15