【问题标题】:gtk+ without msys2 mingwgtk+ 没有 msys2 mingw
【发布时间】:2017-04-06 17:05:25
【问题描述】:

在 Windows 上,尝试使用 gtk+。我已经下载了 Msys2 和 gtk+3.0。

成功编译msys2 mingw-w64终端中的所有gtk+3.0示例。

现在我想进一步尝试在没有 msys 环境的情况下工作。

我打开 cmd 并导航到示例可执行文件的编译位置。然后我通过输入“example.exe”来启动它们。

libgio-2.0-0.dll missing,并不惊讶。我回去查看msys环境的PATH环境,PATH=/mingw64/bin/:/usr/local/bin:/usr/bin/:/bin:/c/Windows/System32:..blablabla

所以在 cmd 环境中我做了set PATH=%PATH%;pathto/mingw64/bin; 并再次运行example.exe。

这次却报了一个很奇怪的错误cannot find entrypoint inflateValidate (in dll libpng16-16.dll)

所以我检查了一下,确实 dll 中没有 inflateValidate 函数。在我看来,有些东西认为该函数在 dll 中并试图调用它,但因为它不存在所以它失败了。我不明白的是,为什么在msys环境下没有失败,而在windows环境下却失败了。如果我要发布任何 gtk 应用程序,这会给我带来什么影响吗?我认为只需分发相关的 dll 就足够了。

我尝试过将 mingw64/bin 路径添加到 PATH 变量中,而是将所需的 dll 复制到执行位置 1 到 1,但最后它仍然给出了相同的错误。

我也试过在我的电脑里搜索其他libpng*.dll,没有一个包含inflateValidate函数。

如果有人知道发生了什么,请说明问题。

【问题讨论】:

  • 好的,似乎 PATH 变量的顺序很重要,我将 PATH 更改为 set PATH=pathto/mingw64/bin;%PATH%,然后它就起作用了。原来 inflateValidate 是一个 zlib 函数,我没有复制 zlib dll,因为没有弹出 dll 丢失错误。也许通过将 mingw64/bin 放在首位,它可以确保使用相同的编译器 zlib 和 libpng。我将把问题和评论留在这里以供将来参考。
  • 我遇到了同样的错误,但它是由 MSYS2 中过时的 zlib.dll 引起的。我在 MSYS2 的 shell 中输入pacman -S mingw-w64-x86_64-zlib 进行更新,错误消失了。

标签: gtk libpng


【解决方案1】:

我可能迟到了,但我昨天遇到了同样的问题(缺少 inflateValidate 符号),在检查 zlib1.dll 文件的内容后可以确定该函数不存在。

我下载了另一个版本(特别是这个https://sourceforge.net/projects/uqm-mods/files/latest/download,虽然我绝不隶属于这个项目)并且看到确实声明了 inflateValidate 符号,所以我认为与您的文件捆绑在一起的 zlib 不符合符合 libpng 要求的日期。

这解决了我的问题。我希望它也能解决你的问题。

【讨论】:

    猜你喜欢
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多