如何为本机窗口(而不是X窗口)编译gtk +应用程序?

时间:2013-09-14 08:36:40

标签: c++ c windows gtk

我已经设法使用cygwin编译了一个gtk +应用程序,但不幸的是,使用这种方法,应用程序需要运行x windows才能启动。

如何编译我的gtk +应用程序以在Windows上本机运行。

我在网上看到有关使用-mno-cygwin标记到gcc的各种帖子,但这似乎已被弃用了?

我也在stackoverflow上看过这些帖子,但是如果他们正在尝试为X编译,或者本机地为Windows编译,则不清楚:

1 个答案:

答案 0 :(得分:3)

应用程序需要使用MinGW而不是Cygwin进行编译。

我遵循的完整步骤列表:

1)下载MinGW

2)将MinGW安装到没有空格的文件夹中,例如到c:\ MinGW。

3)下载gtk +。即使我的机器是64位,我还是花了32位下载gtk +,因为64位下载页面上有兼容性警告。 GTK + Win32下载量为here。我去了all-in-one版本。

4)将gtk +提取到没有空格的文件夹,例如C:\ GTK

5)如果您还没有应用程序,可以使用gtk + hello world源代码。将其保存到文件夹,例如C:\ MyApp的\

6)打开Windows命令提示符并在步骤5中cd到该文件夹​​。

cd c:\myapp

7)在命令窗口中,将MinGW文件夹添加到Windows PATH,例如

c:\myapp> set PATH=c:\gtk\bin;%PATH%

8)在命令窗口中,将gtk +文件夹添加到Windows PATH,例如

c:\myapp> set PATH=c:\gtk\bin;%PATH%

9)创建一个脚本来编译你的应用程序,例如

C:\myapp> C:\MinGW\msys\1.0\bin\bash.exe -c "echo gcc -Wall -g helloworld.c -o helloworld `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` > compile.bat"

请注意,我必须提供bash.exe的完整路径。出于某种原因,将c:\MinGW\msys\1.0\bin添加到PATH并仅使用bash.exe对我来说无效。

10)使用compile.bat编译你的应用程序,例如

c:\myapp> compile.bat

12)执行你的申请,例如

c:\myapp> helloworld.exe

screenshot


编辑

对于第9步,我们只是创建一个gcc命令来使用正确的include和library选项设置来编译gtk +。

这是为我生成的compile.bat的内容:

gcc -Wall -g helloworld.c -o helloworld -mms-bitfields -Ic:/DEV/gtk224/include/gtk-2.0 -Ic:/DEV/gtk224/lib/gtk-2.0/include -Ic:/DEV/gtk224/include/atk-1.0 -Ic:/DEV/gtk224/include/cairo -Ic:/DEV/gtk224/include/gdk-pixbuf-2.0 -Ic:/DEV/gtk224/include/pango-1.0 -Ic:/DEV/gtk224/include/glib-2.0 -Ic:/DEV/gtk224/lib/glib-2.0/include -Ic:/DEV/gtk224/include -Ic:/DEV/gtk224/include/freetype2 -Ic:/DEV/gtk224/include/libpng14 -Lc:/DEV/gtk224/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl

其中,pkg-config --cflags gtk+-2.0创建的包含选项:

-mms-bitfields -Ic:/DEV/gtk224/include/gtk-2.0 -Ic:/DEV/gtk224/lib/gtk-2.0/include 
   -Ic:/DEV/gtk224/include/atk-1.0 -Ic:/DEV/gtk224/include/cairo 
   -Ic:/DEV/gtk224/include/gdk-pixbuf-2.0 -Ic:/DEV/gtk224/include/pango-1.0 
   -Ic:/DEV/gtk224/include/glib-2.0 -Ic:/DEV/gtk224/lib/glib-2.0/include 
   -Ic:/DEV/gtk224/include -Ic:/DEV/gtk224/include/freetype2 
   -Ic:/DEV/gtk224/include/libpng14

(注意我在上面添加了换行符以提高stackoverflow的可读性)

请注意pkg-config --cflags gtk+-2.0已放置了我的gtk + include文件的完整路径(c:/ DEV / gtk224 / include /)。

pkg-config --libs gtk+-2.0生成的库选项:

-Lc:/DEV/gtk224/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 
   -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 
   -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl

(注意我在上面添加了换行符以提高stackoverflow的可读性)

请注意pkg-config --libs gtk+-2.0已经放置了我的gtk库文件夹的完整路径(c:/ DEV / gtk224 / lib)。

有关pkg-config的详情,请参阅GTK+ documentation