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

问题描述 投票:3回答:2

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

windows gtk gtk3 msys2
2个回答
5
投票

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

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


3
投票

事实证明,运行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复制到当前目录,无需自己费力地完成。


-1
投票
ldd kangaroo.exe | grep '\/mingw64\/bin\/.*dll' -o | xargs -I{} cp "{}" .
© www.soinside.com 2019 - 2024. All rights reserved.