百度exe加载动态库路径顺序,大致是这样的:

可执行文件链接动态库(dll)的一点猜想

但是有一个问题,假如我装了两个版本的Qt库A和B,其dll路径都写在了环境变量Path中, 并且A在B的前面,那么我在使用B版本库编译的程序,运行时肯定是先搜寻Path中排在前面的路径下是否存在所需dll。那么无疑是先搜寻到A版本的dll,搜寻到了同名的dll,是否会停止继续搜寻,然后使用这个dll,发现版本不对,继而报错呢?

或者再直接一点,我将一个32位版本的dll放到一个64位的exe目录下,如下:

可执行文件链接动态库(dll)的一点猜想

运行程序首先是搜寻到自身目录下这三个库,那么会不会报错呢?

经过实验不会报错,仍成功运行。

并且,在一个64位的项目中,运行程序结束后,注意到调试信息,C:\Program Files (x86)下的PCL是32位的,C:\Program Files下的PCL是64位的,exe先加载了32位的dll,然后紧接着又加载了64位的同名dll,之后将32位的dll都卸载了。

我的猜想是,exe按照Path中路径顺序搜寻dll,我电脑环境变量Path中的32位PCL路径是放在64位前面的,首先搜寻到32位的dll,加载,发现不是所需的,然后继续搜寻,又搜到一个同名dll,加载,发现这个是所需的,然后将不需要的卸载。

如果搜寻了所有路径,都没有找到正确版本的dll,此时才会报错。

可执行文件链接动态库(dll)的一点猜想

 

相关文章:

  • 2022-12-23
  • 2021-08-29
  • 2022-12-23
  • 2021-09-29
  • 2022-01-19
  • 2021-12-03
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-05-16
  • 2022-01-20
  • 2021-12-11
  • 2022-12-23
相关资源
相似解决方案