在Windows 7上编译和运行GTK +应用程序

时间:2013-10-11 19:12:59

标签: c++ c windows gcc gtk

系统:Windows7,32位,GTK 2.24.10,mingw
我正在尝试编写基本的helloworld.c类型的基于GTK的应用程序。但是,它没有运行 这些是我遵循的步骤。

  1. 安装MinGW。
  2. 将GTK +全部下载到一个包中。
  3. 在C:\ gtk文件夹中提取内容。
  4. 打开cmd并转到C:\ gtk \ bin目录并运行pkg-config --cflags --libs gtk + -win32-2.0
  5. 它打印编译标志列表,以及链接您的库 项目到。 复制它们并创建一个浴室文件,如下所示。 设置VAR = FLAGS 开始cmd 其中VAR = GTK,FLAGS =上一个命令(pkg-config)的输出。 当您要编译文件使用命令时:gcc foo.c%VAR%
  6. D:\ gtk> gcc -o project helloworld.c%GTK%
    gcc:%GTK%:没有这样的文件或目录 helloworld.c:1:21:错误:gtk / gtk.h:没有这样的文件或目录 helloworld.c:在函数'main'中: helloworld.c:5:错误:'GtkWidget'未声明(首次在此函数中使用) helloworld.c:5:错误:(每个未声明的标识符仅报告一次 helloworld.c:5:错误:对于它出现的每个函数。) helloworld.c:5:错误:'window'未声明(首次在此函数中使用) helloworld.c:9:错误:'GTK_WINDOW_TOPLEVEL'未声明(首次在此函数中使用)

    D:\gtk>gcc -Wall -g helloworld.c -o helloworld pkg-config --cflags gtk+-2.0 pkg-config --libs gtk+-2.0
    gcc: pkg-config: No such file or directory
    gcc: gtk+-2.0: No such file or directory
    gcc: pkg-config: No such file or directory
    gcc: gtk+-2.0: No such file or directory
    cc1.exe: error: unrecognized command line option "-fcflags"
    cc1.exe: error: unrecognized command line option "-flibs"
    

    D:\ gtk

    中的批处理文件
    set GTK=-mms-bitfields -IC:/gtk/include/gtk-2.0 -IC:/gtk/lib/gtk-2.0/include -IC:/gtk/include/atk-1.0 -IC:/gtk/include/cairo -IC:/gtk/include/gdk-pixbuf-2.0 -IC:/gtk/include/pango-1.0 -IC:/gtk/include/glib-2.0 -IC:/gtk/lib/glib-2.0/include -IC:/gtk/include -IC:/gtk/include/freetype2 -IC:/gtk/include/libpng14  -LC:/gtk/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
    start cmd
    

    helloworld.c

    #include <gtk/gtk.h>
    
    int main( int   argc,
              char *argv[] )
    {
        GtkWidget *window;
    
        gtk_init (&argc, &argv);
    
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_widget_show  (window);
    
        gtk_main ();
    
        return 0;
    }
    

    参考:Installing gtk and compiling using gcc under windows?

3 个答案:

答案 0 :(得分:6)

您可以尝试以下手动步骤:

1)在命令提示符处运行pkg-config命令以获取包含标志:

c:\dev\gtk224\bin\pkg-config.exe --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

2)将(1)的输出设置为变量GTK_INCLUDES:

C:\dev\1_repo\gtk_scratch>set GTK_INCLUDES=-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

(确保使用步骤(1)中的输出)

3)对库标志执行与步骤1相同的操作:

c:\dev\gtk224\bin\pkg-config.exe --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

4)将(3)的输出设置为变量GTK_LIBS

C:\dev\1_repo\gtk_scratch>set GTK_LIBS=-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

(确保使用步骤(3)中的输出)

5)确保gtk +和MinGW在您的路径上:

set PATH=c:\dev\MinGW\bin\;c:\dev\gtk224\bin

(确保将路径设置为您的mingw和gtk目录)

6)编译:

c:\dev\MinGW\bin\gcc.exe -g helloworld.c -o helloworld %GTK_INCLUDES% %GTK_LIBS%

7)当您能够编译OK时,将您在步骤2,4,5和6中所做的内容复制到批处理文件中,这样就可以通过运行批处理文件来编译应用程序。 < / p>

答案 1 :(得分:3)

错误就在这里。

pkg-config是一个帮助(我强烈建议)确定链接和lib标志的实用程序。你得到的问题是 gcc将它解释为参数,如果你像你一样传递它们 - 你需要在子shell 中解释它们(但我不知道如何在windows shell或cygwin下执行此操作)在bash下它是$(pkconfig --libs gtk-2.0)或者使用反引号代替$(...)

D:\gtk>gcc -Wall -g helloworld.c -o helloworld pkg-config --cflags gtk+-2.0 pkg-config --libs gtk+-2.0
gcc: pkg-config: No such file or directory
gcc: gtk+-2.0: No such file or directory
gcc: pkg-config: No such file or directory
gcc: gtk+-2.0: No such file or directory
cc1.exe: error: unrecognized command line option "-fcflags"
cc1.exe: error: unrecognized command line option "-flibs"

答案 2 :(得分:2)

运行hello,world程序时遇到同样的错误。以下解决方案为我工作。

不要将helloworld.c保存在任意位置,而是将其放在

MinGW&gt; msys&gt; 1.0&gt;主页&gt; “您的主文件夹的名称”&gt; helloworld.c

现在,打开msys.bat并编写命令来运行程序。就我而言,它是:

gcc hello.c -o hello `pkg-config --cflags --libs gtk+-3.0`

它对我有用!