Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';Visual Studio找不到我的DLL?_C++_Visual Studio_Visual Studio 2010_Visual C++_Dll - Fatal编程技术网

C++ 为什么可以';Visual Studio找不到我的DLL?

C++ 为什么可以';Visual Studio找不到我的DLL?,c++,visual-studio,visual-studio-2010,visual-c++,dll,C++,Visual Studio,Visual Studio 2010,Visual C++,Dll,在VisualStudio2010中,我在VC++目录>可执行目录下指定了glew32d.dll的路径。但是,当我运行可执行文件时,它仍然会抱怨 另一方面,如果我将DLL复制到本地文件夹并运行可执行文件,它不会抱怨 有人能告诉我怎么修吗?另外,为什么VisualStudio无法识别该路径 更新 场景:我目前使用一个模板项目,我将其用作我的许多项目的启动代码。此模板依赖于glew32d.dll。我通常将所有相关DLL存储在公共bin文件夹中。我希望引用这个文件夹,VisualStudio可以从那里

在VisualStudio2010中,我在
VC++目录>可执行目录下指定了
glew32d.dll
的路径。但是,当我运行可执行文件时,它仍然会抱怨

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

有人能告诉我怎么修吗?另外,为什么VisualStudio无法识别该路径

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

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

将DLL文件与可执行文件放在同一文件夹中是迄今为止最简单的解决方案。这是对依赖项的定义,因此,如果您采用这种方法,则无需执行任何特殊操作。
为了避免每次手动执行此操作,可以为项目创建生成后事件,该事件将在生成完成后自动将DLL复制到相应的目录中


或者,您可以将DLL部署到Windows,并向您的应用程序添加一个指定位置的清单。

我在同一个库中遇到了同样的问题,在上找到了解决方案 因此:

在MSDN中搜索“如何:为项目设置环境变量”。 (项目>属性>配置属性>调试) “环境”和“合并环境”属性,适用于处于 (匆匆忙忙。)

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

例如,要将C:\Windows\Temp前置到路径:

PATH=C:\WINDOWS\Temp;%PATH%
PATH=%PATH%;$(TargetDir)\DLLS
类似地,要将$(TargetDir)\dll附加到路径,请执行以下操作:

PATH=C:\WINDOWS\Temp;%PATH%
PATH=%PATH%;$(TargetDir)\DLLS

(这里的多重共线性回答:

尝试“配置属性->调试->环境”,并在运行时设置PATH变量,以添加到Oleg的回答中:

我能够在运行时通过附加VisualStudio的
$(ExecutablePath)找到DLL
指向配置属性->调试中的PATH环境变量。此宏正是在配置属性->VC++目录->可执行目录字段*中定义的,因此,如果您有指向所需任何DLL的设置,只需将其添加到路径中,即可轻松在运行时查找DLL


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

@muntoo:什么?另外,我不同意您编辑la的方式st行。这里没有两个独立的问题,因此原始语法是正确的。OP询问他们如何解决这一问题,因为VS不识别路径。他们关心VS不识别路径的唯一原因是因为它可能会引导他们找到解决方案。另一个“肮脏”诀窍是将程序的工作目录设置为
glew32d.dll
。我有点困惑于“这与程序在构建后如何找到所需内容无关”。如果不是这样,那么“可执行目录”有什么用?另外,我用我当前的场景编辑了我的问题。请告诉我什么是谷歌“我不确定我的答案的哪一部分是不清楚的。Visual Studio链接器在构建程序时使用指定的路径来查找它所需的dll。这与程序运行时所需的不同。如果您选择静态链接到
glew32d.dll
,那将是另一回事。”。但是,由于您是动态链接的,编译的链接器步骤和执行时的程序都需要能够找到DLL。您已经解决了第一部分,但没有解决第二部分。根据您的更新,我认为最好的解决方案是复制DLL的后期生成步骤。来吧……VS必须有一种方法在运行时找到DLL。我在VS2010中,我找不到任何方法来引用DLL。它只是有一个选项来引用sln中的其他项目。VS如何在运行时从程序文件中找到自己的DLL?必须有一种方法。使用生成后事件可以工作,但依赖它似乎是错误的。应该有一种方法来指定runti的DLL路径me执行。有人知道怎么做吗?@ruud DLL应该和EXE放在同一个目录中。在生成时,您可以很容易地让MsBuild将它们转储到同一个目录中,或者,如果失败,则将它们作为生成后事件复制到该目录中。依赖工作目录是非常脆弱的。如果用户创建应用程序的快捷方式并更改工作目录是否指向其他目录?轰,崩溃,找不到DLL。EXE目录位于DLL搜索顺序的顶部。工作目录位于底部。如果工作目录更高,则会带来巨大的安全风险。这正是我要找的,谢谢!