当我想使用标准C / C ++库中的东西时,我可以只包含适当的标题并使用该函数。 WinAPI函数也是如此。
我理解编译器如何找到这些标题 - 它会在localy中搜索它们,如果找不到则会在某些预定义的系统文件夹中查找。
但我无法弄清楚链接器是如何完成这些库的,因为我不以任何方式包含它们......
答案 0 :(得分:4)
如果您使用带有默认设置的Visual Studio 2012,除了C Runtime之外,链接器将链接以下内容:
KERNEL32.LIB USER32.LIB GDI32.LIB winspool.lib comdlg32.lib advapi32.lib SHELL32.LIB ole32.lib oleaut32.lib UUID.LIB odbc32.lib odbccp32.lib
如果右键单击项目,属性 - 链接器 - 输入 - 其他依赖项,您可以自己查看列表。
如果您愿意,可以删除一些或添加一些。
对于C运行时,它由/ NODEFAULTLIB链接器选项控制,更多详细信息:https://msdn.microsoft.com/en-us/library/3tz4da4a(v=vs.110).aspx
答案 1 :(得分:1)
链接器只有编译器本身附带的标准库
例如,如果您安装GNU GCC,那么您将看到一个文件夹lib
,其中包含链接器用于链接代码的所有静态库。
如果您需要告诉链接器使用特定库或来自其他地方的某些静态库,您始终可以使用-l
或-L
标志(对于GNU GCC)来指示您想要的链接器使用库的特定库或文件夹。