【发布时间】: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进行更新,错误消失了。