如何在Windows上分发GTK +应用程序?

时间:2018-03-04 06:51:20

标签: windows gtk gtk3 msys2

我在Windows上通过MSYS和MinGW安装了GTK +(特别是GTK3)。我现在想将GTK + dll复制到我的应用程序目录,以便它可以在没有全局GTK +安装的计算机上运行。 GTK +需要哪些dll才能运行?

4 个答案:

答案 0 :(得分:5)

您对Windows page of the GTK+ website有一些提示。这是名为构建和分发您的应用程序的部分。它包含一篇关于distributing a GTK+ application on Windows的博文。

提出的解决方案是为您的应用程序创建一个MSYS2包,然后将其及其所有依赖项(其中包括GTK +)安装在特定目录中,以便您可以重新分发整个包。

答案 1 :(得分:2)

事实证明,运行ldd mygtkapp.exe(使用MinGW提供的ldd)给了我一个让它运行所需的所有dll的列表。为了只获取gtk依赖项(而不是例如Win32 dll)的dll,我使用了以下命令:ldd mygtkapp.exe | sed -n 's/\([^ ]*\) => \/mingw.*/\1/p' | sort。我的程序使用了Haskell绑定,所以依赖关系可能有点不同,但这就是我得到的:

libatk-1.0-0.dll
libbz2-1.dll
libcairo-2.dll
libcairo-gobject-2.dll
libepoxy-0.dll
libexpat-1.dll
libffi-6.dll
libfontconfig-1.dll
libfreetype-6.dll
libgcc_s_seh-1.dll
libgdk_pixbuf-2.0-0.dll
libgdk-3-0.dll
libgio-2.0-0.dll
libglib-2.0-0.dll
libgmodule-2.0-0.dll
libgobject-2.0-0.dll
libgraphite2.dll
libgthread-2.0-0.dll
libgtk-3-0.dll
libharfbuzz-0.dll
libiconv-2.dll
libintl-8.dll
libpango-1.0-0.dll
libpangocairo-1.0-0.dll
libpangoft2-1.0-0.dll
libpangowin32-1.0-0.dll
libpcre-1.dll
libpixman-1-0.dll
libpixman-1-0.dll
libpng16-16.dll
libstdc++-6.dll
libwinpthread-1.dll
zlib1.dll

另请注意,制作完全独立的应用程序还需要做其他一些事情,特别是如果您使用的是股票图标;有关详细信息,请参阅https://stackoverflow.com/a/34673860/7345298。但请注意,我需要复制16x16目录而不是可伸缩目录。

编辑:我实际上发现以下命令非常有用:ldd mygtkapp.exe | grep '\/mingw.*\.dll' -o | xargs -I{} cp "{}" .。该命令实际上将dll复制到当前目录,无需自己费力地完成。

答案 2 :(得分:2)

以下过程可用于获取必要的DLL:

  1. 下载Listdlls
  2. 让您的应用程序运行
  3. 打开Listdlls.exe所在的PowerShell窗口
  4. 使用命令./Listdlls.exe application_name.exe
  5. 将所有列出的路径复制到文本文件
  6. 删除文本文件中所有包含“ C:\ WINDOWS *”的行
  7. 仅保留文本中包含“ C:\ msys64 * ... *。dll”的行 文件
  8. 打开Msys2 Shell
  9. 使用$ cp“ paste_all_paths_from_dlls”“目标路径”

使用 $ cp 命令之前的注意事项。在您的文本文件中,将路径中的“ \”更改为“ /”,然后删除换行符。

答案 3 :(得分:-1)

ldd kangaroo.exe | grep '\/mingw64\/bin\/.*dll' -o | xargs -I{} cp "{}" .