最近发现一个问题:CheckSumMappedFile( )函数,如下
项目中调用了CheckSumMappedFile( )函数,也加上了头文件#include <imagehlp.h>,可在生成时提示链接错误:error LNK2001: 无法解析的外部符号 __imp__CheckSumMappedFile@16
后来加上了#pragma comment(lib,"imagehlp.lib"),就可以顺利生成可执行程序了。
应该是C++编译器堆函数名”粉碎“,于是找到imagehlp.dll文件和生成的可执行程序,找到CheckSumMappedFile( )函数,如下图:
函数名也不是__imp__CheckSumMappedFile@16啊,这到底是怎么回事?
lib文件分2种:
1、包含所有内容的静态库,生成的应用程序包含静态库中的代码,生成的应用程序体积也会很大。
2、只包含函数头部信息,在链接时使用,生成的应用程序体积小,调用代码有操作系统加载对应dll文件实现。
原因就明显了,imagehlp.lib的作用就是在链接时提供程序调用函数信息,仅仅加一个头文件是不够的。
那么问题来了:
CheckSumMappedFile( )函数需要加上lib信息和头文件,程序中的其他函数却不需要加上lib信息,只加上头文件就可以顺利生成可执行程序。
难道其他函数是VS自动加入lib,不需要我们手动写。(好牵强的解释)