2
A
回答
4
您可以通过使用-dumpspecs
开关了解gcc自动传递给链接器的参数。例如,在我的Windows 7安装程序与MinGW的使用:
gcc -dumpspecs | less
下libgcc的部分它表明:
*libgcc:
%{mthreads:-lmingwthrd} -lmingw32 %{shared-libgcc:-lgcc_s} -lgcc -lmoldname -lmingwex -lmsvcrt
这表明这些库传递到LD连接,除非我明确地与类似的选项禁止它nodefaultlibs
或nostdlib
。您的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}}
希望能回答你的问题。
谢谢! (1)libgcc和lib之间有什么区别?这两个部分下的库是否都默认链接? (2)标准C库是否默认链接? – Tim 2011-06-15 02:02:28
@Tim我更新了我的答案;希望它能回答你的问题。 – greatwolf 2011-06-15 04:18:10
谢谢! (1)“GCC支持库”是什么意思? GCC支持大多数图书馆吗? (2)“如果像nodefaultlib这样的选项被传入,那么只会使用lib规范字符串,但libgcc不会。”你的意思是我们只能删除“lib”部分中的默认库,而不是“libgcc”部分中的? – Tim 2011-06-15 12:56:15