lib链接库

最近发现一个问题: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,不需要我们手动写。(好牵强的解释)

猜你喜欢

转载自blog.csdn.net/singleyellow/article/details/84755825
今日推荐