我已经成功使用cygwin编译了一个gtk+应用程序,但不幸的是,这种方法需要运行x windows才能启动应用程序。
如何将我的gtk+应用程序编译为在Windows上本地运行。
我在网上看到了各种有关使用-mno-cygwin
标志来编译gcc
的帖子,但似乎已经被弃用?
我还看到了这些stackoverflow上的帖子,但不清楚他们是在尝试为X编译还是在本地为Windows编译:
我已经成功使用cygwin编译了一个gtk+应用程序,但不幸的是,这种方法需要运行x windows才能启动应用程序。
如何将我的gtk+应用程序编译为在Windows上本地运行。
我在网上看到了各种有关使用-mno-cygwin
标志来编译gcc
的帖子,但似乎已经被弃用?
我还看到了这些stackoverflow上的帖子,但不清楚他们是在尝试为X编译还是在本地为Windows编译:
该应用程序需要使用MinGW进行编译,而不是Cygwin。
我遵循的完整步骤如下:
1)下载MinGW
2)将MinGW安装到没有空格的文件夹中,例如c:\MinGW。
3)下载gtk+。即使我的机器是64位的,我也选择了32位的gtk+下载,因为在64位下载页面上有兼容性警告。GTK+ Win32下载地址在这里。我选择了all-in-one版本。
4)将gtk+提取到没有空格的文件夹中,例如c:\gtk
5) 如果您还没有应用程序,可以使用 gtk+ hello world 源代码。将其保存到文件夹中,例如 c:\myapp\。
6) 打开 Windows 命令提示符并 cd 到第 5 步中的文件夹。例如:
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"
编辑:
第9步,我们只是创建一个gcc
命令,以正确的包含和库选项设置编译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+包含文件的完整路径(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+文档。
pkg-config --cflags gtk+-2.0
pkg-config --libs gtk+-2.0
。但是当我从cmd提示符中执行它时,它只会打印两次。您可以在https://dev59.com/wXfZa4cB1Zd3GeqPXOJ7找到我的问题。 - msinfo