链接器如何找到标准和WinAPI函数?

时间:2015-03-20 09:06:27

标签: c++ c windows linker

当我想使用标准C / C ++库中的东西时,我可以只包含适当的标题并使用该函数。 WinAPI函数也是如此。

我理解编译器如何找到这些标题 - 它会在localy中搜索它们,如果找不到则会在某些预定义的系统文件夹中查找。

但我无法弄清楚链接器是如何完成这些库的,因为我不以任何方式包含它们......

2 个答案:

答案 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)来指示您想要的链接器使用库的特定库或文件夹。