带有Quartz的GTK窗口

我正在尝试使用GStreamer SDK的basic-tutorial-5来处理OSX。

SDK从http://gstreamer.freedesktop.org/data/pkg/osx/1.2.4.1/下载

来自http://cgit.freedesktop.org/~slomo/gst-sdk-tutorials/的教程(适用于1.0)

我收到以下错误

basic-tutorial-5.c:5:10: fatal error: 'gst/video/videooverlay.h' file not found 

我跑的时候

 gcc `pkg-config gstreamer-1.0 gtk+-3.0 --cflags --libs` basic-tutorial-5.c -o basic5 

任何指针都会有所帮助!

谢谢。

编辑:

gst/video/videooverlay.h中有一个gst/video/videooverlay.h /local/frameworks/Gstreamer.framework/Headers

pkg-config gstreamer-1.0 gtk+-3.0 --cflags --libs不包括/Library/Frameworks/Gstreamer.framework/Versions/1.0/Headers

感谢@Biffen使用时

  gcc `pkg-config --cflags --libs gtk+-3.0` -o basic5 basic-tutorial-5.c -I/Library/Frameworks/Gstreamer.framework/Versions/1.0/Headers -framework GStreamer 

还有一点动作:

  basic-tutorial-5.c:114:17: warning: 'gtk_button_new_from_stock' is deprecated [-Wdeprecated-declarations] play_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY); ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/gtkbutton.h:103:16: note: 'gtk_button_new_from_stock' declared here GtkWidget* gtk_button_new_from_stock (const gchar *stock_id); ^ basic-tutorial-5.c:114:44: warning: 'GtkStock' is deprecated [-Wdeprecated-declarations] play_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY); ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/deprecated/gtkstock.h:747:38: note: expanded from macro 'GTK_STOCK_MEDIA_PLAY' #define GTK_STOCK_MEDIA_PLAY ((GtkStock)"gtk-media-play") ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/deprecated/gtkstock.h:107:16: note: 'GtkStock' declared here typedef char * GtkStock; ^ basic-tutorial-5.c:117:18: warning: 'gtk_button_new_from_stock' is deprecated [-Wdeprecated-declarations] pause_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE); ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/gtkbutton.h:103:16: note: 'gtk_button_new_from_stock' declared here GtkWidget* gtk_button_new_from_stock (const gchar *stock_id); ^ basic-tutorial-5.c:117:45: warning: 'GtkStock' is deprecated [-Wdeprecated-declarations] pause_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE); ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/deprecated/gtkstock.h:733:38: note: expanded from macro 'GTK_STOCK_MEDIA_PAUSE' #define GTK_STOCK_MEDIA_PAUSE ((GtkStock)"gtk-media-pause") ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/deprecated/gtkstock.h:107:16: note: 'GtkStock' declared here typedef char * GtkStock; ^ basic-tutorial-5.c:120:17: warning: 'gtk_button_new_from_stock' is deprecated [-Wdeprecated-declarations] stop_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP); ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/gtkbutton.h:103:16: note: 'gtk_button_new_from_stock' declared here GtkWidget* gtk_button_new_from_stock (const gchar *stock_id); ^ basic-tutorial-5.c:120:44: warning: 'GtkStock' is deprecated [-Wdeprecated-declarations] stop_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP); ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/deprecated/gtkstock.h:799:38: note: expanded from macro 'GTK_STOCK_MEDIA_STOP' #define GTK_STOCK_MEDIA_STOP ((GtkStock)"gtk-media-stop") ^ /usr/local/Cellar/gtk+3/3.12.2/include/gtk-3.0/gtk/deprecated/gtkstock.h:107:16: note: 'GtkStock' declared here typedef char * GtkStock; ^ 6 warnings generated. 

所以它符合……这似乎向前迈出了一大步,但仍然没有雪茄……

当我尝试运行basic5时,我得到:

 (process:73178): GLib-GObject-WARNING **: cannot register existing type 'gchar' ** GLib-GObject:ERROR:gvaluetypes.c:455:_g_value_types_init: assertion failed: (type == G_TYPE_CHAR) Abort trap: 6 

编辑v2:

感谢nemequ我现在可以使用gcc -o basic5 basic-tutorial-5.c pkg-config –libs –cflags gstreamer-1.0 gstreamer-video-1.0 gtk + -3.0“进行编译并运行./basic5以获取以下内容错误:

 Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that org.freedesktop.dbus-session.plist is loaded! (basic5:77683): Gtk-WARNING **: cannot open display: 

似乎/Library/Frameworks/Gstreamer.framework/Versions/1.0/Headers文件夹中缺少gtk文件夹(以及其他文件,毫无疑问),所以使用pkg-config..是一种解决方法。

如果我在XQuartz终端中运行./basic5 ,我会收到以下错误:

 Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that org.freedesktop.dbus-session.plist is loaded! (basic5:78227): GLib-GIO-ERROR **: No GSettings schemas are installed on the system Trace/BPT trap: 5 

别人有什么想法吗?

对于最初的问题,解决方案取决于您的系统,因此给您一个很好的答案有点困难,但gst / video / videooverlay.h是gstreamer-video-1.0软件包的一部分, 而不是 gstreamer-1.0

也就是说,如果您正在使用GStreamer SDK,那么根据GStreamer SDK文档, 您应该使用-framework GStreamer ,而不是pkg-config。

至于您所看到的“无法注册现有类型”的错误,当您尝试链接同一个库的两个不同版本时,往往会发生这种错误。 TBH我从来没有见过它与gchar一起发生,但它可能意味着你正在尝试链接到两个不同版本的glib或gobject,这是有道理的 – gtk+-3.0 pkg-config文件将gobject-2.0 glib-2.0gobject-2.0作为依赖项,它们都已包含在GStreamer SDK中。 AFAICT GTK +也包含在GStreamer SDK中,所以试着摆脱pkg-config的东西:

 gcc -o basic5 basic-tutorial-5.c -I/Library/Frameworks/Gstreamer.framework/Versions/1.0/Headers -framework GStreamer