2017-06-16 153 views
0

我想完成在https://developer.gnome.org/gtk3/stable/ch01s04.html上的GTK +教程,但是当我编译代码时,得到错误-pthread:command not found。我正在使用Ubuntu 17.04。我的编译命令是:GTK +教程编译错误

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

我下载的文件来自:https://git.gnome.org/browse/gtk+/tree/examples/application3,所以我知道它们是正确的。提前致谢。

根据下面的评论添加到此。收到错误:

/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/Scrt1.o: In function `_start': 

    (.text+0x20): undefined reference to `main' 

    collect2: error: ld returned 1 exit status 

后来,当我编译主,我收到错误:

/tmp/ccMOUa6f.o: In function `main': 

    main.c:(.text+0x19): undefined reference to `example_app_new' 

    collect2: error: ld returned 1 exit status   
+1

你忘了指定编译器。 – andlabs

+0

例子:'gcc -o exampleappwin exampleappwin.c \'pkg-config --libs gtk + -3.0 \''(其中gcc是编译器as andlabs提到的) –

+0

哇!我无法相信我做到了!我总是把它放在评论中,以便剪切和粘贴。好。我收到一个错误:'/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/Scrt1.o:函数'_start': (.text + 0x20):对'main'的未定义引用 collect2:错误:ld返回1退出状态。当我尝试编译main时,收到一个错误:'/tmp/ccMOUa6f.o:在main函数中: main .c :(。text + 0x19):未定义的引用'example_app_new' collect2:错误:ld返回1退出状态' – Guest123ABC

回答

0

你提到的这个例子是一个更大的集的例子的一部分,它的准备与制作使用或Meson从父目录/文件夹发出。

如果你想“手动”编译,那么你必须注意到有资源文件需要处理。

The files mentioned on the question above

[...]$ ls 
exampleapp.c    exampleapp.h  exampleappwin.h Makefile.am  meson.build 
exampleapp.gresource.xml exampleappwin.c main.c   Makefile.example window.ui 
[...]$ 

只编译例子,那么你应该做的:

gcc -o exampleapp main.c exampleapp.c exampleappwin.c `pkg-config --cflags --libs gtk+-3.0` 

这将编译,但是当你运行它,警告会出现由于missings资源。

./exampleapp 

(exampleapp:4171): Gtk-CRITICAL **: Unable to load resource for composite template for type 'ExampleAppWindow': The resource at '/org/gtk/exampleapp/window.ui' does not exist 
(exampleapp:4171): Gtk-CRITICAL **: gtk_widget_class_bind_template_child_full: assertion 'widget_class->priv->template != NULL' failed 
(exampleapp:4171): Gtk-CRITICAL **: gtk_widget_init_template: assertion 'template != NULL' failed 

现在,你应该准备的资源(将创建resources.c):

glib-compile-resources exampleapp.gresource.xml --target=resources.c --sourcedir=. --generate-source 

,然后重新编译(添加上述resources.c文件):

gcc -o exampleapp main.c exampleapp.c exampleappwin.c resources.c `pkg-config --cflags --libs gtk+-3.0` 

的警告应该消失,并且窗口必须包含一个标题栏。

您可以在此问题上找到关于编译资源的更多信息: GTK/C and GtkBuilder to make a single executable但请注意,您应该使用Make或Meson等构建工具作为项目已有的工具。

另一种选择是下载示例项目并将它们全部构建。

+0

好的。我做到了这一切,似乎一切工作到目前为止。非常感谢你。对不起,第一篇文章。我仍然无法相信我做到了。为页面添加书签。再次感谢。对此,我真的非常感激。我确实建立了他们的记录。使用它们来学习GTK。 – Guest123ABC

+0

@ Guest123ABC很高兴它的工作,并随时问你学习GTK的问题。如果这个答案解决了你的问题,随时接受它是正确的。祝你好运 –

+0

我试图提高你的答案,但是我的声望更低。它表示它计数上升,但不会显示,直到获得更高的声誉。 :) – Guest123ABC