SDL_Image在加载PNG文件时出现错误:"无法加载libpng16-16.dll:"

9
每当我尝试使用SDL_Image的IMG_Load函数加载PNG文件时,它会出现错误 Failed loading libpng16-16.dll:。 我已经将所有正确的dll放在了正确的路径中,并且我可以使用SDL_Image的其他部分,但由于某种原因它无法加载libpng dll。我该如何解决这个问题?感谢任何帮助。

你在使用哪个集成开发环境?它是 Visual Studio 吗?如果是,你是直接从 VS 进行调试,还是直接运行编译后的可执行文件? - Gigi
我正在使用Visual Studio,并在其中进行调试。以另一种方式运行它会有所不同吗? - a sandwhich
直接运行已编译的可执行文件没有任何区别。结果相同。 - a sandwhich
6个回答

25

看起来MinGW-w64(32位)中的libpng16-16.dll依赖于zlib1.dll。请尝试将zlib包含在依赖项中——将DLL文件包含在可执行文件运行的文件夹中。


1
我还应该提到,zlib 是世界上最流行的库之一,而 PNG 使用 zlib 的压缩作为其格式的一部分。 - CinchBlue

6

请查看我的文章 "SDL2:使用SDL_image加载图像":

如果您要从Visual Studio运行,请确保图像与main.cpp文件在同一个文件夹中;否则,如果直接从可执行文件运行,则图像应与其在同一个文件夹中。

不用说,我在这里写的关于图像的内容也适用于DLL。


1
我已经将DLL和图像放置在可执行文件目录和源目录中,但仍然出现相同的错误。使用libpng需要其他库吗? - a sandwhich
12
在那篇博客文章的项目中,我有libjpeg-9.dll、libpng16-16.dll、libtiff-5.dll、libwebp-4.dll和zlib1.dll以及明显的SDL2.dll和SDL2_image.dll。如果你只包含了libpng,我建议你尝试包含所有其他的库——可能会存在我们不知道的依赖项。事实上,我刚刚检查了一下,libpng需要zlib:http://www.libpng.org/pub/png/libpng.html - Gigi
4
问题出在这里。我将libjpeg-9.dll、zlib1.dll和libtiff-5.dll复制到所需的目录中,现在它可以正常工作,没有错误。谢谢。 - a sandwhich

1
在执行目录之外,VS不会搜索dlls文件,所以您可能需要将该dll文件复制到解决方案路径中的Debug/目录下。

我已经在Debug目录中拥有它以及其他必要的库。 - a sandwhich

1

非常专业的答案,但是对于那些因为使用pySDL2而遇到这个问题的人来说,可能是因为你的Python解释器不够好。对我来说,使用Windows商店安装的Python解释器3.10会出现这个问题。然而,当我从python.org切换到3.10时,所有的问题都得到了解决。


0

这个链接会向您展示如何设置SDL库/libpng16-16.dll,以便编译器.exe可以访问(在示例代码之前的最后一步)

您的程序属性页面 -> 构建事件 -> 后期构建事件
在我的情况下,我有
copy “C:\Users\MehdiB\Desktop\C Program\Library\SDL2-devel-2.0.4-VC\SDL2-2.0.4\lib\x86\SDL2.dll” “$(OutDir)SDL2.dll”;
copy “C:\Users\MehdiB\Desktop\C Program\Library\SDL2_image-devel-2.0.1-VC\SDL2_image-2.0.1\lib\x86\SDL2_image.dll” “$(OutDir)SDL2_image.dll”;
copy “C:\Users\MehdiB\Desktop\C Program\Library\dll\libjpeg-9.dll” “$(OutDir)libjpeg-9.dll”

这里是您可以获取此dll的地方


-2

3
将dll文件替换到system32和SysWOW64中是非常不好的做法,可能会破坏Windows系统!最好将这个dll文件放在与二进制文件相同的目录下,这样更安全。 - Thomas P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接