【问题标题】:SDL_Image IMG_Load fails on png with: "Failed loading libpng16-16.dll:"SDL_Image IMG_Load 在 png 上失败,并显示:“加载 libpng16-16.dll 失败:”
【发布时间】:2014-01-31 05:21:46
【问题描述】:

每当我尝试使用 SDL_Image 的 IMG_Load 函数加载 PNG 时,它都会给出错误 Failed loading libpng16-16.dll:。我在正确的路径中拥有所有正确的 dll,我可以使用 SDL_Image 的其他部分,但由于某种原因,它无法加载 libpng dll。我怎样才能解决这个问题?任何帮助表示赞赏。

【问题讨论】:

  • 您使用的是什么 IDE?是Visual Studio吗?如果是这样,你是直接从VS调试,还是直接运行编译好的可执行文件?
  • 我正在使用 Visual Studio,并且正在 VS 中进行调试。以另一种方式运行会有所不同吗?
  • 直接运行编译后的可执行文件没有区别。结果相同。

标签: windows load png sdl-2 sdl-image


【解决方案1】:

对于 MinGW-w64(32 位),libpng16-16.dll 似乎依赖于 zlib1.dll。尝试将 zlib 包含到您的依赖项中——将 DLL 包含在可执行文件运行的文件夹中。

【讨论】:

  • 我还应该提到zlib 是世界上最流行的库之一,PNG 使用来自zlib 的压缩作为其格式的一部分。
  • 解决了我的问题。谢谢!
  • 太棒了!!谢谢!!
【解决方案2】:

见我的文章“SDL2: Loading Images with SDL_image”:

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

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

【讨论】:

  • 我已将 DLL 与图像一起放置在可执行文件目录和源目录中。仍然得到同样的错误。使用 libpng 是否需要额外的库?
  • 在该博客文章的项目中,我有 libjpeg-9.dll、libpng16-16.dll、libtiff-5.dll、libwebp-4.dll 和 zlib1.dll 以及明显的 SDL2。 dll 和 SDL2_image.dll。如果您只包含 libpng,我建议您尝试包含所有其他内容 - 可能存在您和我都不知道的依赖关系。其实我刚查了一下,libpng需要zlib:libpng.org/pub/png/libpng.html
  • 这就是问题所在。我将 libjpeg-9.dll、zlib1.dll 和 libtiff-5.dll 复制到所需的目录中,现在它可以正常工作了。谢谢。
  • 很高兴能帮上忙。 :)
【解决方案3】:

VS 不会在除执行目录之外的任何地方搜索 dll,因此您可能需要将该 dll 复制到解决方案路径上的 Debug/ 目录。

【讨论】:

  • 我已经在 Debug 目录中拥有了它以及其他必要的库。
【解决方案4】:

This link 向您展示如何设置 SDL library/libpng16-16.dll 以供 compiler.exe 访问(示例代码之前的最后一步)

yourProgram 属性页面 -> 构建事件-> 构建后事件
就我而言,我有
复制“C:\Users\MehdiB\Desktop\C Program\Library\SDL2-devel-2.0.4-VC\SDL2-2.0.4\lib\x86\SDL2.dll”“$(OutDir)SDL2.dll”;
复制“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”;
复制“C:\Users\MehdiB\Desktop\C Program\Library\dll\libjpeg-9.dll”“$(OutDir)libjpeg-9.dll”

here 哪里可以得到这个 dll

【讨论】:

    【解决方案5】:

    我刚刚用从下载的那个替换了 system32 和 SysWOW64 中的 zlib1.dll https://github.com/OctaForge/OF-Windows/blob/master/bin_win32/zlib1.dll .并且工作得很好

    【讨论】:

    • 替换 system32 和 SysWOW64 中的 dll 文件是一种非常糟糕的做法,您可能会破坏 Windows!最好把这个dll和二进制放在同一个目录下,这样更安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2012-12-21
    • 2012-12-29
    • 2020-09-01
    • 2019-07-10
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多