lib、dll文件的中函数的查看与lib、dll、pdb文件的介绍

1、利用VS工具中的dumpbin.exe可以查看lib、dll中的函数,查了的命令如下:

本电脑安装的VS2017,dumpbin.exe的路径在D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\HostX64\x64下,命令如下:

(1)查看lib文件中函数命令:

dumpbin.exe /LINKERMEMBER "D:\Qt\Qt5.13.0\5.13.0\msvc2017\lib\Qt5Concurrent.lib" >"E:\hhhh\A.txt"

(2)查看dll文件中函数命令:

dumpbin.exe /exports "D:\Qt\Qt5.13.0\5.13.0\msvc2017\bin\Qt5Core.dll" >"E:\hhhh\Adll.txt"

2、lib、dll、pdb的文件作用

(1)lib是编译时需要的,dll是运行时需要的。
如果要完成源代码的编译,有lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
(2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。

(4)也可以只有lib文件,这样的话,库中的库中的函数和数据也都要写入lib文件中,同时也会在链接阶段合并到exe中,这样做的坏处是使exe很大,就是去了“库”的意义了,因此不建议这么做。

(5)PDB(Program Data Base),意即程序的基本数据,是VS编译链接时生成的文件。DPB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等。因为存储的是调试信息,所以一般情况下PDB文件是在Debug模式下才会生成。

上述资料参考于LIB文件和DLL文件的作用 - J.M.Liu - 博客园


lib、和dll的生成方式见:VS2017创建静态库lib和使用静态库_我能想到的的博客-CSDN博客_vs 静态库

 3、LNK2001的静态库链接错误

原因大概有:

(1)对应的函数不存在。

(2)没有添加对应的lib库。

(3)使用的lib库版本不一样。

可以参考:常见LNK2001错误解决办法_weixin_30512785的博客-CSDN博客

 其他常见错误可参考:

VS出现error LNK2005,error C4430,error C2011_夜雨听萧瑟的博客-CSDN博客_错误c2011

你可能感兴趣的:(C/C++语言,mfc,microsoft,c#)