帮助编译GTK+在 Windows 上使用 MinGW

发布于 2024-11-03 18:19:36 字数 6625 浏览 0 评论 0原文

我正在尝试在 Windows 上编译一个简单的 GTK+ Hello World 应用程序。我正在关注以下网址的教程:

http://pandhar0.tripod.com/#mini-Tutorial< /a>

我的 HelloWorld.c 的内容如下,也取自维基百科示例:

 #include <gtk/gtk.h>

 int main (int argc, char *argv[])
 {
    GtkWidget *window;
    GtkWidget *label;

    gtk_init (&argc, &argv);

    /* create the main, top level, window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    /* give it the title */
    gtk_window_set_title (GTK_WINDOW (window), "Hello World");

    /* Connect the destroy signal of the window to gtk_main_quit
     * When the window is about to be destroyed we get a notification and
     * stop the main GTK+ loop
     */
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

    /* Create the "Hello, World" label  */
    label = gtk_label_new ("Hello, World");

    /* and insert it into the main window  */
    gtk_container_add (GTK_CONTAINER (window), label);

    /* make sure that everything, window and label, are visible */
    gtk_widget_show_all (window);

    /* start the main loop, and let it rest there until the application is closed */
    gtk_main ();

    return 0;
 }

我已按照说明生成构建 bat 文件,其内容如下:

path C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\%path%

gcc -Wall -g %1 -o %2 -mno-cygwin -mms-bitfields -IC:C:\gtk_2_22_x64\include\gtk-2.0 -IC:C:\gtk_2_22_x64\lib\gtk-2.0\include -IC:C:\gtk_2_22_x64\include\atk-1.0 -IC:C:\gtk_2_22_x64\include\cairo -IC:C:\gtk_2_22_x64\include\gdk-pixbuf-2.0 -IC:C:\gtk_2_22_x64\include\pango-1.0 -IC:C:\gtk_2_22_x64\include\glib-2.0 -IC:C:\gtk_2_22_x64\lib\glib-2.0\include -IC:C:\gtk_2_22_x64\include\pixman-1 -IC:C:\gtk_2_22_x64\include -IC:C:\gtk_2_22_x64\include\freetype2 -IC:C:\gtk_2_22_x64\include\libpng14 -LC:C:\gtk_2_22_x64\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


%2

我的环境路径中有 MinGW。当我在命令提示符下运行以下命令时:

gtkcmd.bat HelloWorld.c HelloWorld.exe

我得到以下输出:

C:\gtk+_compilation>gtkcmd.bat HelloWorld.c HelloWorld.exe

C:\gtk+_compilation>path C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\C:\MinGW\bin;C:C:\gt
k_2_22_x64\lib\C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\C:\MinGW\bin;C:C:\gtk_2_22_x64
\lib\C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\C:\MinGW\bin;C:\gtk_2_22_x64\lib\C:\MinG
W\bin;C:\gtk_2_22_x64\lib\C:\Program Files\Common Files\Microsoft Shared\Windows
 Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windo
ws\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPower
Shell\v1.0\;C:\Program Files\Dell\Dell Wireless WLAN Card;c:\Program Files (x86)
\Common Files\Roxio Shared\10.0\DLLShared\;c:\Program Files (x86)\Common Files\R
oxio Shared\DLLShared\;C:\Program Files\TortoiseSVN\bin;c:\Program Files (x86)\M
icrosoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Windows Live\Shared;C:
\Program Files (x86)\IronPython 2.7;c:\Program Files (x86)\Microsoft ASP.NET\ASP
.NET Web Pages\v1.0\;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\MinGW\bin;C:\gt
k_2_22_x64\bin;C:\gtk_2_22_x64\lib

C:\gtk+_compilation>gcc -Wall -g HelloWorld.c -o HelloWorld.exe -mno-cygwin -mms
-bitfields -IC:C:\gtk_2_22_x64\include\gtk-2.0 -IC:C:\gtk_2_22_x64\lib\gtk-2.0\i
nclude -IC:C:\gtk_2_22_x64\include\atk-1.0 -IC:C:\gtk_2_22_x64\include\cairo -IC
:C:\gtk_2_22_x64\include\gdk-pixbuf-2.0 -IC:C:\gtk_2_22_x64\include\pango-1.0 -I
C:C:\gtk_2_22_x64\include\glib-2.0 -IC:C:\gtk_2_22_x64\lib\glib-2.0\include -IC:
C:\gtk_2_22_x64\include\pixman-1 -IC:C:\gtk_2_22_x64\include -IC:C:\gtk_2_22_x64
\include\freetype2 -IC:C:\gtk_2_22_x64\include\libpng14 -LC:C:\gtk_2_22_x64\lib
-lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lp
angocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -
lgthread-2.0 -lglib-2.0 -lintl
HelloWorld.c:1:22: fatal error: gtk/gtk.h: No such file or directory
compilation terminated.

C:\gtk+_compilation>HelloWorld.exe
'HelloWorld.exe' is not recognized as an internal or external command,
operable program or batch file.

C:\gtk+_compilation>

以前我曾严格按照教程所述进行尝试,并在路径语句中使用 / 而不是我现在使用的完整路径。当我确实使用 / 时,尽管它无法链接任何内容。每个 GTK 语句都返回一个未定义的错误。因此,我一直在命令行中使用标头中的完整路径和链接器语句。从上面可以看出,它找不到gtk/gth.h头。这让我很困惑,因为我可以清楚地看到命令行参数内的路径。

非常感谢任何帮助。

干杯,

安德鲁

更新:

好吧 - 我确实搞砸了bat文件 - 愚蠢的错误,但在用下面的答案纠正这些内嵌错误后,我现在有了以下bat文件:

path \MinGW\bin;C:\gtk_2_22_x64\lib\%path%

gcc -Wall -g %1 -o %2 -mno-cygwin -mms-bitfields -IC:\gtk_2_22_x64\include\gtk-2.0 -IC:\gtk_2_22_x64\lib\gtk-2.0\include -IC:\gtk_2_22_x64\include\atk-1.0 -IC:\gtk_2_22_x64\include\cairo -IC:\gtk_2_22_x64\include\gdk-pixbuf-2.0 -IC:\gtk_2_22_x64\include\pango-1.0 -IC:\gtk_2_22_x64\include\glib-2.0 -IC:\gtk_2_22_x64\lib\glib-2.0\include -IC:\gtk_2_22_x64\include\pixman-1 -IC:\gtk_2_22_x64\include -IC:\gtk_2_22_x64\include\freetype2 -IC:\gtk_2_22_x64\include\libpng14 -LC:\gtk_2_22_x64\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


%2

在此之后,我现在收到以下错误编译:

C:\Users\REA_AN~1\AppData\Local\Temp\cclrbtyP.o: In function `main':
C:\gtk+_compilation/HelloWorld.c:8: undefined reference to `gtk_init_abi_check'
C:\gtk+_compilation/HelloWorld.c:11: undefined reference to `gtk_window_new'
C:\gtk+_compilation/HelloWorld.c:14: undefined reference to `gtk_window_get_type
'
C:\gtk+_compilation/HelloWorld.c:14: undefined reference to `g_type_check_instan
ce_cast'
C:\gtk+_compilation/HelloWorld.c:14: undefined reference to `gtk_window_set_titl
e'
C:\gtk+_compilation/HelloWorld.c:20: undefined reference to `gtk_main_quit'
C:\gtk+_compilation/HelloWorld.c:20: undefined reference to `g_signal_connect_da
ta'
C:\gtk+_compilation/HelloWorld.c:23: undefined reference to `gtk_label_new'
C:\gtk+_compilation/HelloWorld.c:26: undefined reference to `gtk_container_get_t
ype'
C:\gtk+_compilation/HelloWorld.c:26: undefined reference to `g_type_check_instan
ce_cast'
C:\gtk+_compilation/HelloWorld.c:26: undefined reference to `gtk_container_add'
C:\gtk+_compilation/HelloWorld.c:29: undefined reference to `gtk_widget_show_all
'
C:\gtk+_compilation/HelloWorld.c:32: undefined reference to `gtk_main'
collect2: ld returned 1 exit status

I am on with trying to compile a simple GTK+ Hello World app on windows. I am following a tutorial from this url:

http://pandhare0.tripod.com/#mini-Tutorial

The contents of my HelloWorld.c is as follows and also taken from a wikipedia example:

 #include <gtk/gtk.h>

 int main (int argc, char *argv[])
 {
    GtkWidget *window;
    GtkWidget *label;

    gtk_init (&argc, &argv);

    /* create the main, top level, window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    /* give it the title */
    gtk_window_set_title (GTK_WINDOW (window), "Hello World");

    /* Connect the destroy signal of the window to gtk_main_quit
     * When the window is about to be destroyed we get a notification and
     * stop the main GTK+ loop
     */
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

    /* Create the "Hello, World" label  */
    label = gtk_label_new ("Hello, World");

    /* and insert it into the main window  */
    gtk_container_add (GTK_CONTAINER (window), label);

    /* make sure that everything, window and label, are visible */
    gtk_widget_show_all (window);

    /* start the main loop, and let it rest there until the application is closed */
    gtk_main ();

    return 0;
 }

I have followed the instructions to generate the build bat file and the contents of which are below:

path C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\%path%

gcc -Wall -g %1 -o %2 -mno-cygwin -mms-bitfields -IC:C:\gtk_2_22_x64\include\gtk-2.0 -IC:C:\gtk_2_22_x64\lib\gtk-2.0\include -IC:C:\gtk_2_22_x64\include\atk-1.0 -IC:C:\gtk_2_22_x64\include\cairo -IC:C:\gtk_2_22_x64\include\gdk-pixbuf-2.0 -IC:C:\gtk_2_22_x64\include\pango-1.0 -IC:C:\gtk_2_22_x64\include\glib-2.0 -IC:C:\gtk_2_22_x64\lib\glib-2.0\include -IC:C:\gtk_2_22_x64\include\pixman-1 -IC:C:\gtk_2_22_x64\include -IC:C:\gtk_2_22_x64\include\freetype2 -IC:C:\gtk_2_22_x64\include\libpng14 -LC:C:\gtk_2_22_x64\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


%2

I have the MinGW inside my environment path. When I run the following command inside my command prompt:

gtkcmd.bat HelloWorld.c HelloWorld.exe

I get the following output:

C:\gtk+_compilation>gtkcmd.bat HelloWorld.c HelloWorld.exe

C:\gtk+_compilation>path C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\C:\MinGW\bin;C:C:\gt
k_2_22_x64\lib\C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\C:\MinGW\bin;C:C:\gtk_2_22_x64
\lib\C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\C:\MinGW\bin;C:\gtk_2_22_x64\lib\C:\MinG
W\bin;C:\gtk_2_22_x64\lib\C:\Program Files\Common Files\Microsoft Shared\Windows
 Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windo
ws\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPower
Shell\v1.0\;C:\Program Files\Dell\Dell Wireless WLAN Card;c:\Program Files (x86)
\Common Files\Roxio Shared\10.0\DLLShared\;c:\Program Files (x86)\Common Files\R
oxio Shared\DLLShared\;C:\Program Files\TortoiseSVN\bin;c:\Program Files (x86)\M
icrosoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Windows Live\Shared;C:
\Program Files (x86)\IronPython 2.7;c:\Program Files (x86)\Microsoft ASP.NET\ASP
.NET Web Pages\v1.0\;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\MinGW\bin;C:\gt
k_2_22_x64\bin;C:\gtk_2_22_x64\lib

C:\gtk+_compilation>gcc -Wall -g HelloWorld.c -o HelloWorld.exe -mno-cygwin -mms
-bitfields -IC:C:\gtk_2_22_x64\include\gtk-2.0 -IC:C:\gtk_2_22_x64\lib\gtk-2.0\i
nclude -IC:C:\gtk_2_22_x64\include\atk-1.0 -IC:C:\gtk_2_22_x64\include\cairo -IC
:C:\gtk_2_22_x64\include\gdk-pixbuf-2.0 -IC:C:\gtk_2_22_x64\include\pango-1.0 -I
C:C:\gtk_2_22_x64\include\glib-2.0 -IC:C:\gtk_2_22_x64\lib\glib-2.0\include -IC:
C:\gtk_2_22_x64\include\pixman-1 -IC:C:\gtk_2_22_x64\include -IC:C:\gtk_2_22_x64
\include\freetype2 -IC:C:\gtk_2_22_x64\include\libpng14 -LC:C:\gtk_2_22_x64\lib
-lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lp
angocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -
lgthread-2.0 -lglib-2.0 -lintl
HelloWorld.c:1:22: fatal error: gtk/gtk.h: No such file or directory
compilation terminated.

C:\gtk+_compilation>HelloWorld.exe
'HelloWorld.exe' is not recognized as an internal or external command,
operable program or batch file.

C:\gtk+_compilation>

Previously I had tried, strictly what the tutorial said, and used the / in the path statements as opposed to the full paths I now use. When I did use the / though it could not link anything. Every GTK statement returned an undefined error. So I have stayed with using the Full path in the header and linkers statements in the command line. As you can see from the above, it cannot find the gtk/gth.h header. This confuses me as I can clearly see the paths for such inside the command line arguments.

Any help is greatly appreciated.

Cheers,

Andrew

UPDATE:

Ok - I did screw up the bat file - daft mistakes but after correcting these inline with an answer below I now have the following bat file:

path \MinGW\bin;C:\gtk_2_22_x64\lib\%path%

gcc -Wall -g %1 -o %2 -mno-cygwin -mms-bitfields -IC:\gtk_2_22_x64\include\gtk-2.0 -IC:\gtk_2_22_x64\lib\gtk-2.0\include -IC:\gtk_2_22_x64\include\atk-1.0 -IC:\gtk_2_22_x64\include\cairo -IC:\gtk_2_22_x64\include\gdk-pixbuf-2.0 -IC:\gtk_2_22_x64\include\pango-1.0 -IC:\gtk_2_22_x64\include\glib-2.0 -IC:\gtk_2_22_x64\lib\glib-2.0\include -IC:\gtk_2_22_x64\include\pixman-1 -IC:\gtk_2_22_x64\include -IC:\gtk_2_22_x64\include\freetype2 -IC:\gtk_2_22_x64\include\libpng14 -LC:\gtk_2_22_x64\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


%2

After this I now get the following errors from the compilation:

C:\Users\REA_AN~1\AppData\Local\Temp\cclrbtyP.o: In function `main':
C:\gtk+_compilation/HelloWorld.c:8: undefined reference to `gtk_init_abi_check'
C:\gtk+_compilation/HelloWorld.c:11: undefined reference to `gtk_window_new'
C:\gtk+_compilation/HelloWorld.c:14: undefined reference to `gtk_window_get_type
'
C:\gtk+_compilation/HelloWorld.c:14: undefined reference to `g_type_check_instan
ce_cast'
C:\gtk+_compilation/HelloWorld.c:14: undefined reference to `gtk_window_set_titl
e'
C:\gtk+_compilation/HelloWorld.c:20: undefined reference to `gtk_main_quit'
C:\gtk+_compilation/HelloWorld.c:20: undefined reference to `g_signal_connect_da
ta'
C:\gtk+_compilation/HelloWorld.c:23: undefined reference to `gtk_label_new'
C:\gtk+_compilation/HelloWorld.c:26: undefined reference to `gtk_container_get_t
ype'
C:\gtk+_compilation/HelloWorld.c:26: undefined reference to `g_type_check_instan
ce_cast'
C:\gtk+_compilation/HelloWorld.c:26: undefined reference to `gtk_container_add'
C:\gtk+_compilation/HelloWorld.c:29: undefined reference to `gtk_widget_show_all
'
C:\gtk+_compilation/HelloWorld.c:32: undefined reference to `gtk_main'
collect2: ld returned 1 exit status

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧时光的容颜 2024-11-10 18:19:36

看来您按照说明以某种方式错误地创建了 .bat 文件 - this:

-IC:C:\gtk_2_22_x64\include\gtk-2.0

应该是:

-IC:\gtk_2_22_x64\include\gtk-2.0

以及其他地方的类似内容。看起来您的路径设置不正确 - this:

path C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\%path%

应该是:

path C:\MinGW\bin;C:\gtk_2_22_x64\lib\%path%

或类似的东西(注意 C:C: 应该是 C:)。

编辑:现在你的问题是链接器找不到库。批处理文件应包含以下内容:

-L/path/to/gtk/libraries

但我不知道创建文件时如何指定。

It seems you folowed the instructions to create the .bat file incorrectly somehow - this:

-IC:C:\gtk_2_22_x64\include\gtk-2.0

should be:

-IC:\gtk_2_22_x64\include\gtk-2.0

and similar elsewhere. It looks like your path has got set up incorrectly - this:

path C:\MinGW\bin;C:C:\gtk_2_22_x64\lib\%path%

should be:

path C:\MinGW\bin;C:\gtk_2_22_x64\lib\%path%

or something like it (note C:C: should be C:).

Edit: And now your problem is that the linker cannot find the libraries. The batch file should contain stuff like:

-L/path/to/gtk/libraries

but I don't know how you specify that when you create the file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文