Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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++ &引用;“计算机中缺少SDL2.DLL”;但和程序在同一个文件夹中吗?_C++_Visual Studio_Sdl - Fatal编程技术网

C++ &引用;“计算机中缺少SDL2.DLL”;但和程序在同一个文件夹中吗?

C++ &引用;“计算机中缺少SDL2.DLL”;但和程序在同一个文件夹中吗?,c++,visual-studio,sdl,C++,Visual Studio,Sdl,同一目录中的SDL文件夹: SDL文件夹的内容: 我无法让我的程序运行,因为它说找不到SDL2.DLL?有什么想法吗?程序不会在整个硬盘上搜索DLL。这将是昂贵的,非常不安全的,并且容易出现错误 相反,它们有一个搜索路径,这取决于您如何加载它。通常使用PATH环境变量,以及各种其他系统位置,以及加载动态库的进程目录 此列表很少包含“名为SDL的流程可执行文件的子目录”。但是,您可以修改搜索路径;具体的加载方式取决于您尝试加载SDL的方式 简单的解决方案是尝试将它们全部复制到同一个目录。您可以

同一目录中的SDL文件夹:

SDL文件夹的内容:


我无法让我的程序运行,因为它说找不到SDL2.DLL?有什么想法吗?

程序不会在整个硬盘上搜索DLL。这将是昂贵的,非常不安全的,并且容易出现错误

相反,它们有一个搜索路径,这取决于您如何加载它。通常使用
PATH
环境变量,以及各种其他系统位置,以及加载动态库的进程目录

此列表很少包含“名为
SDL
的流程可执行文件的子目录”。但是,您可以修改搜索路径;具体的加载方式取决于您尝试加载SDL的方式


简单的解决方案是尝试将它们全部复制到同一个目录。

您可以使用生成后事件
sdl2.dll
复制到生成
.exe
的目录中。手动复制文件对于快速测试来说是很好的,但是让VisualStudio为您这样做有一些好处。例如,这允许您完全删除
Debug
Release
目录,并在执行干净构建时复制正确的文件

在您的目录列表中,我看到
SDL
目录中的
bin32
bin64
目录。我假设每个目录中都有一个
sdl2.dll
的副本,但是没有单独的调试和发布版本,只有32位和64位。如果这不正确,请告诉我,否则,您可以执行以下操作:

打开解决方案资源管理器并选择您的项目(而不是解决方案)。然后使用Alt+Enter直接转到属性页。(或右键单击项目,然后选择菜单底部的属性。)

在左侧的选择面板中,转到配置属性/生成事件/生成后事件

在属性页顶部,将配置下拉列表设置为所有配置,将平台下拉列表设置为所有平台

单击命令行右侧的编辑框,然后输入以下命令:

copy "$(SolutionDir)SDL\bin$(PlatformArchitecture)\sdl2.dll" "$(TargetDir)"
现在单击确定,保存并构建解决方案。您应该发现它将
sdl2.dll的正确版本(32位或64位)复制到构建目录中

命令行中的各种
$(FooBar)
条目都是宏,它们会根据项目目录位置、构建平台的类型等自动展开

$(SolutionDir)
是包含您的
.sln
文件的目录,带有尾随的齿隙

$(平台架构)
32
还是
64
取决于您为哪个平台构建

$(TargetDir)
是VS在其中创建
.exe
文件的目录

因此,此命令行是一个普通的
copy
命令,您可以在命令提示符中使用它,并填充路径将
SDL\bin32\sdl2.dll
SDL\bin64\sdl2.dll
复制到构建目标目录。我们在源路径和目标路径周围使用引号,以防项目路径中有空格

在某些情况下,您可能需要特定配置(调试/发布)或平台(Win32/x64)的特定命令。您可以通过在属性页顶部选择该配置或平台来实现这一点。在我们的例子中,由于
$(PlatformArchitecture)
宏,我们可以对32位和64位构建使用一个命令

要了解有关宏的更多信息,可以在属性页中选择命令行框,然后单击框右侧出现的下拉箭头,然后选择。这将打开一个多行编辑窗口(您可以在生成事件中使用多个命令),其下方有一个评估值,显示将用于当前配置和平台的实际命令。您可以检查此命令以查看其外观是否正确,还可以复制经过计算的命令并将其粘贴到命令提示窗口中进行快速测试


要查看当前配置/平台可用宏的完整列表及其扩展内容,请单击该列表下方的宏>>按钮,查看列表或使用顶部的搜索框。

SDL2.DLL
需要与程序位于同一目录中;或者包含它的目录必须位于您的
路径上。正如Richard所说,将来将它与
.exe
文件放在同一文件夹中,请不要链接到内容。将问题中的所有相关信息以纯文本形式显示。坏问题;不支持你。非常感谢你们,解决了这个问题,我把相关的DLL放在了调试文件夹中!