Mr_L_Y
2017-01-09 07:03
采纳率: 33.3%
浏览 4.9k

关于VS2015编译的C++工程的DLL路径问题

我用VS2015编译的一个C++工程用到了一个第三方的动态链接库,但是这个库我下载了两个版本。
我用VS进行调试的时候它调用的是我当前环境变量PATH下的库1,但是我直接在工程的bin->debug目录下打开exe文件,这时候这个exe调用的是我之前设置的环境变量PATH下的库2.
所以我的exe在链接DLL的时候,不是从当前的系统环境变量的PATH里面查找的,而是从某个副本环境变量PATH查找相应的DLL文件么?我尝试过把调用DLL的工程清理重新生成,然后直接运行exe文件,这时候链接的DLL还是上一个PATH路径下的,不是当前的PATH路径下的库1.
请教各位,这个问题是由于什么造成的,exe调用的DLL路径倒是由谁来决定的?虽然,我猜测把DLL跟exe放在一个目录下肯定没有这个问题,但是还是想知道其中的原理,谢谢!

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • oyljerry 2017-01-09 07:45

    exe加载DLL的时候会有一系列的搜索路径

     假如安全DLL搜索模式启用,搜索顺序如下:
    1. 应用程序所在的路径
    2. Windows SYSTEM目录。通过调用GetSystemDirectory函数可以获取这个目录的路径。
    3. 16位系统的目录。并没有函数可以获取这个目录的路径,但是它会被查找。
    4. Windows目录。通过调用GetWindowsDirectory函数可以获取这个目录的路径。
    5. 当前目录
    6. PATH环境变量指定的路径。请注意,这并不包括每个应用程序的应用程序路径注册表项中指定。在应用程序路径注册表项的键值并不作为DLL的搜索路径。
    
    评论
    解决 无用
    打赏 举报
  • Mr_L_Y 2017-01-10 01:51

    谢谢回答!这个搜索顺序我知道,但现在我发现更新了PATH路径之后,在进行VSdebug的时候这个路径更新到了,而在直接运行exe程序的时候使用的路径还是原来的路径。
    后来我重启了电脑,然后exe的路径就变成最新的了。所以我怀疑exe使用的路径不是我们看到的系统环境变量的PATH路径,而是这个路径某个备份,每次启动电脑的时候更新什么的。

    评论
    解决 无用
    打赏 举报
  • shen_wei 2017-01-10 08:23

    属性,链接器 常规 输出文件 $(OutDir)\$(ProjectName).exe 这里表示了生成exe的路径和文件名。。。。对于外部调用dll,一定要确保路径的正确。

    或者你可以放到系统下。。。

    评论
    解决 无用
    打赏 举报
  • Mr_L_Y 2017-01-11 09:21

    谢谢回答!我的问题在于exe程序和VS2015的本地调试器加载的系统环境变量PATH好像不是一个东西,exe的加载路径重启后才会更新。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题