只需双击即可运行使用MSYS2构建的GTK +应用程序

时间:2017-10-20 21:57:17

标签: c windows dependencies gtk msys2

我有一个simple window应用程序,使用MSYS2构建,我希望能够在MSYS2 MinGW shell之外运行,只需双击该应用程序即可。

问题是,当我想运行应用程序时,它必须是MSYS MinGW提示符,否则会返回错误。

The code execution cannot proceed because libgio-2.0-0.dll was not found. Reinstalling the program may fix this problem

我试过包括(通过将文件复制到我的exe的位置) libgio-2.0-0.dll出现了更多错误,表示图书馆遗失了。我也包括这些文件。我已经显示了下面包含的文件:

libffi-6.dll
libgdk-3-0.dll
libglib-2.0-0.dll
libgmodule-2.0-0.dll
libgtk-3-0.dll
libgobject-2.0-0.dll
libgio-2.0-0.dll
libatk-1.0-0.dll
libcairo-gobject-2.dll
libcairo-2.dll
libepoxy-0.dll
libpcre-1.dll
libwinpthread-1.dll
libgdk_pixbuf-2.0-0.dll
libpango-1.0-0.dll

最后出现错误:

The application was unable to start correctly (0xc000007b).  Click OK to close the application.

I found what the error message means:

  

该特定错误代码指的是无效的图像格式。但是,错误代码通常意味着您尝试运行的程序旨在与64位Windows操作系统一起使用,但您只有32位操作系统。

然而,由于我正在运行x64计算机,因此无效。 DLL是x64以及exe。

www.gtk.org说GTK +依赖于某些库,除了我上面所做的以外,我想不出任何解决方案,也无法找到任何关于要包含哪些依赖项的文档,以便不通过MSYS提示运行它。 / p>

那么我需要做些什么来让我的窗户工作?应用程序很好,依赖项存在问题。

对于我给出的脚本,我需要包含哪些依赖项(或者我列出了所有这些依赖项,在这种情况下我的窗口出了什么问题)?

最后是否有一种比我想要做的更简单的方法来获得所有必要的依赖?

2 个答案:

答案 0 :(得分:3)

系统需要能够找到共享库。在Linux系统上,这是通过链接器,通常是ld。查找位置的配置位于/etc/ld.so.conf/etc/ld.so.conf.d

现在在Windows上,这并不存在。这就是环境变量PATH通常用于此的原因,有时也会被安装程序修改。但是为每个程序更改PATH都很烦人,禁止重新定位(移动整个app目录并从其他地方运行应用程序)。所以你可以创建一个空目录,在其中创建一个bin目录,然后在那里复制你的应用程序二进制文件和GTK +库。这应该有效,因为Windows上的the current directory is searched before the PATH variable

所以你所做的是正确的。您遇到的问题类似于应用重新分配,即。收集必要的位以在另一台计算机上分发软件。遗憾的是,这不是GTK +网站上记录最多的部分。您是否尝试使用不使用GtkApplication类的应用程序?

答案 1 :(得分:0)

我通过像这样的命令行包含库来修复它。

gcc pkg-config --cflags gtk+-3.0 -o example-1 example-1.c pkg-config --libs gtk+-3.0

并使用MSYS2 installer

附带的 mingw64.exe 运行它