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

bra*_*drn 4 windows gtk gtk3 msys2

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

lib*_*rce 6

您可以在GTK +网站Windows页面上找到一些提示。这是名为“ 构建和分发应用程序”的部分。它的博客文章是有关在Windows上分发GTK +应用程序的

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

  • 不,您正在混乱。诸如msi工具之类的工具会将文件打包在一起以生成msi软件包。他们假设您知道要发送哪些文件。在OP问题中,他不知道要运送什么。您可以使用msitools或wix或nsis或其他任何东西作为第二步,但是首先您必须确定要分发的内容,这就是我的答案。 (3认同)
  • @Lothar:你没有抓住重点。开发人员为她的应用程序创建了 msys2 包。然后她可以使用 msys2 提供的包管理器 pacman 将她的应用程序*及其依赖项*安装在一个单独的目录中。因此,您让依赖项求解器完成查找所需文件的工作。这是您为最终用户打包的内容。作为额外的好处,使用 msys2 的人也可以轻松安装您的软件包。 (2认同)
  • 您能让我冷静一点并讲技术而不是叫我一个书呆子吗? (2认同)

bra*_*drn 5

事实证明,运行ldd mygtkapp.exe(与lddMinGW 一起提供)为我提供了使其运行所需的所有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
Run Code Online (Sandbox Code Playgroud)

还请注意,制作一个完全独立的应用程序还需要做其他几件事,特别是如果您使用的是股票图标。有关更多详细信息,请参见/sf/answers/2427170231/。但是请注意,我需要复制16x16目录而不是可伸缩目录。

编辑:其实我已经发现了下面的命令是非常有用的:ldd mygtkapp.exe | grep '\/mingw.*\.dll' -o | xargs -I{} cp "{}" .。该命令实际上将dll复制到当前目录,从而无需您费力地自己做。