为什么Visual Studio找不到我的DLL?

bra*_*ter 46 c++ dll visual-studio-2010 visual-studio visual-c++

在Visual Studio 2010中,VC++ Directories > Executable Directories我已指定了路径glew32d.dll.但是,当我运行可执行文件时,它仍然会抱怨.

另一方面,如果我将DLL复制到本地文件夹然后运行可执行文件,它不会抱怨.

有人可以告诉我如何解决这个问题吗?另外,为什么Visual Studio无法识别该路径?

更新 场景:我目前使用的模板项目用作许多项目的入门代码.此模板取决于glew32d.dll.我通常将所有相关的dll存储在一个公共bin文件夹中.我希望引用这个文件夹,Visual Studio可以从那里读取dll,而不是每次都要复制dll.处理这个问题的好方法是什么?

Cod*_*ray 60

在项目的设置中指定DLL文件的路径并不能确保您的应用程序
在运行时找到DLL.您只告诉Visual Studio如何查找所需的文件.这
与程序在构建后如何找到所需内容无关.

将DLL文件放在与可执行文件相同的文件夹中是迄今为止最简单的解决方案.这是依赖项的默认搜索路径,因此如果你走这条路线,你就不需要做任何特别的事情了.
为避免每次都必须手动执行此操作,您可以为项目创建一个构建后事件,该事件
将在构建完成后自动将DLL复制到相应的目录中.

或者,您可以将DLL部署到Windows 并排缓存,并向应用程序添加指定位置的清单.

  • @brainy:我不确定我的答案的哪一部分不清楚.Visual Studio链接器使用指定的路径来查找*构建*您的程序时所需的DLL.这与************************************如果您选择静态链接到"glew32d.dll",那将是一个不同的故事.但是因为你是动态链接,所以编译*AND*你的程序执行时的链接器步骤都需要能够找到DLL.你已经解决了第一部分,但没有解决第二部分.根据您的更新,我认为最好的解决方案是复制DLL的构建后步骤. (8认同)
  • 来吧...... VS必须有一种方法可以在运行时找到DLL.在VS2010中,我找不到任何方法来引用DLL.它只是可以选择参考sln中的其他项目.VS如何在运行时从Program Files中找到它自己的DLL?必须要有办法.使用post-build事件有效,但依赖它似乎是错误的.应该有一种方法来指定运行时执行的dll的路径.谁知道怎么样? (6认同)
  • @ruud DLL应该与EXE位于同一目录中.您可以轻松地让MsBuild在构建时将它们转储到同一目录中,或者,如果失败,则将它们作为构建后事件复制到那里.依赖于工作目录是非常脆弱的.如果用户创建应用程序的快捷方式并将工作目录更改为其他内容,会发生什么?轰炸,崩溃,找不到DLL.EXE目录位于DLL搜索顺序的顶部.工作目录位于底部.拥有更高的安全风险是一个巨大的风险. (2认同)

小智 41

我在同一个lib上遇到了同样的问题,在SO上找到了一个解决方案:

在MSDN上搜索"如何:为项目设置环境变量".(这是项目>属性>配置属性>调试"环境"和"合并环境"属性,适合那些忙碌的人.)

语法是NAME = VALUE,可以使用宏(例如,$(OutDir)).

例如,要将C:\ Windows\Temp添加到PATH:

PATH=C:\WINDOWS\Temp;%PATH%
Run Code Online (Sandbox Code Playgroud)

同样,要将$(TargetDir)\ DLLS附加到PATH:

PATH=%PATH%;$(TargetDir)\DLLS
Run Code Online (Sandbox Code Playgroud)

(这里由Multicollinearity回答:如何在visual studio中设置路径?


way*_*all 10

尝试"配置属性 - >调试 - >环境"并在运行时设置PATH变量


小智 5

添加到Oleg的答案:

通过将Visual Studio附加$(ExecutablePath)到Configuration Properties-> Debugging中的PATH环境变量,我能够在运行时找到DLL .这个宏正是在Configuration Properties-> VC++ Directories-> Executable Directories字段*中定义的,所以如果你有这个设置指向你需要的任何DLL,只需将它添加到你的PATH就可以轻松找到运行时的DLL!

*我实际上不知道$(ExecutablePath)宏是否使用项目的可执行目录设置或全局属性页的可执行目录设置.由于我拥有通常使用属性页配置的所有库,因此这些目录显示为我创建的任何新项目的默认值.


归档时间:

查看次数:

160295 次

最近记录:

8 年,10 月 前