百度exe加载动态库路径顺序,大致是这样的:
但是有一个问题,假如我装了两个版本的Qt库A和B,其dll路径都写在了环境变量Path中, 并且A在B的前面,那么我在使用B版本库编译的程序,运行时肯定是先搜寻Path中排在前面的路径下是否存在所需dll。那么无疑是先搜寻到A版本的dll,搜寻到了同名的dll,是否会停止继续搜寻,然后使用这个dll,发现版本不对,继而报错呢?
或者再直接一点,我将一个32位版本的dll放到一个64位的exe目录下,如下:
运行程序首先是搜寻到自身目录下这三个库,那么会不会报错呢?
经过实验不会报错,仍成功运行。
并且,在一个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,此时才会报错。