VS2017的C++开发心得(七)DLL动态链接——查看依赖的外部模块

DLL的链接使用,对于每个C++工程来说应该是必须的,有些是你主动使用的,还有很多是VS后台已经链接好了的。首先介绍下怎么看你的程序使用了多少的动态链接库文件:

VS2017的C++开发心得(七)DLL动态链接——查看依赖的外部模块_第1张图片

通过任务管理器的资源监视器,我们在CPU中找到运行程序的进程,选定VSDebugConsole以后,在下面的“关联的模块中”会出现这个程序所依赖的dll文件。目前我们的项目并没有配置额外的第三方库,所以出现的关联dll都是位于system32目录下的,即Windows的基本库文件,这些是由我们VS的项目属性里选择的目标平台版本决定的,如上图这些dll的版本都是10.0.17134和我们目标平台WindowsSDK版本10.0.17134一致。

外部依赖模块的链接分为动态链接和静态链接:

动态链接就像dll文件这样,当程序启动的时候在Windows系统PATH路径下查找它需要的dll文件并加载到内存中使用。

而静态链接则没有dll文件,只有lib文件。这些lib文件所包含的代码在VS项目的链接期会被编译到当前的项目文件中,程序在运行的时候就不需要额外加载dll文件。但一般静态链接编译出来的程序都比较大,静态链接对比动态链接也不够灵活,所以目前的项目开发更多用到的是动态链接。

如果,程序打开如果提示“无法打开xx.dll”“无法找到xx.dll”,那就是动态链接问题了,这时需要在dll的搜索路径下去添加或者更新对应的dll文件。关于dll的搜索路径问题,简单说下环境变量的PATH:

VS2017的C++开发心得(七)DLL动态链接——查看依赖的外部模块_第2张图片

上图中PATH下的路径是程序搜索dll的路径之一,如要让你的程序成功搜索到dll,可以把dll所在的路径添加到PATH下面。还有一种就是和调用dll的exe放在一起。网上很多关于dll找不到的回答是让你放到system32下面,其实system32目录就在系统环境变量的PATH下面。

所以,对于开发者来讲,你要首先了解你开发的程序需要依赖哪些dll文件,然后你要思考发布软件的时候如何保证你的用户的系统中都有这些dll文件。

你可能感兴趣的:(VS2017的C++开发心得(七)DLL动态链接——查看依赖的外部模块)