"SDL2.DLL missing from computer" but is in the same folder as program?

时间:2018-02-01 18:32:56

标签: c++ visual-studio sdl

SDL Folder in the same directory:

Contents of SDL folder:

I cant get my program to run as it says it cannot find SDL2.DLL? Any ideas?

2 个答案:

答案 0 :(得分:2)

程序不会在整个硬盘驱动器中搜索DLL。这将是昂贵的,非常不安全,容易出错。

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

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

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

答案 1 :(得分:2)

您可以使用构建后事件sdl2.dll复制到构建.exe的目录中。手动复制文件很适合快速测试,但让Visual Studio为您执行此操作有一些优点。例如,这可以让您完全删除DebugRelease目录,并在执行干净构建时复制正确的文件。

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

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

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

在属性表的顶部,将配置下拉列表设置为所有配置,将平台下拉列表设置为所有平台< /强>

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

copy "$(SolutionDir)SDL\bin$(PlatformArchitecture)\sdl2.dll" "$(TargetDir)"

现在点击确定,然后保存并构建您的解决方案。您应该会发现它将sdl2.dll的正确版本(32位或64位)复制到构建目录中。

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

$(SolutionDir)是包含.sln文件的目录,带有反斜杠

$(PlatformArchitecture)3264,具体取决于您为之构建的平台。

$(TargetDir)是VS在。{/ p>中创建.exe文件的目录

因此,此命令行是您可能在命令提示符中使用的普通copy命令,其中填入路径以将SDL\bin32\sdl2.dllSDL\bin64\sdl2.dll复制到构建目标目录。如果项目路径中有任何空格,我们在源路径和目标路径周围使用引号。

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

要详细了解这些宏,您可以在属性页中选择命令行框,然后点击该框右侧显示的下拉箭头,然后选择 &LT;编辑...&GT; 即可。这将打开一个多行编辑窗口(您可以在构建事件中使用多个命令),其下方有一个评估值,它显示将用于当前配置和平台的实际命令。您可以检查此命令以查看它是否正确,您还可以复制已评估的命令并将其粘贴到命令提示符窗口中以进行快速测试。

要查看可用宏的完整列表以及它们针对当前配置/平台展开的内容,请单击下面的宏&gt;&gt; 按钮,然后查看列表或使用搜索框顶部。