我在Windows上通过MSYS和MinGW安装了GTK +(特别是GTK3)。我现在想将GTK + dll复制到我的应用程序目录,以便它可以在没有全局GTK +安装的计算机上运行。 GTK +需要哪些dll才能运行?
答案 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:
使用 $ cp 命令之前的注意事项。在您的文本文件中,将路径中的“ \”更改为“ /”,然后删除换行符。
答案 3 :(得分:-1)
ldd kangaroo.exe | grep '\/mingw64\/bin\/.*dll' -o | xargs -I{} cp "{}" .