Окно GTK с Quartz [начиная с проблемы с GStreamer]
Я пытаюсь заставить basic-tutorial-5 пакета GStreamer SDK работать на OSX.
SDK, загруженный с http://gstreamer.freedesktop.org/data/pkg/osx/1.2.4.1/
учебные пособия (для версии 1.0) от http://cgit.freedesktop.org/~slomo/gst-sdk-tutorials/
Я получаю следующую ошибку
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
Любые указатели будут полезны!
Благодарю.
РЕДАКТИРОВАТЬ:
E сть 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:
Кажется, что папка gtk (и другие, без сомнения) отсутствуют в /Library/Frameworks/Gstreamer.framework/Versions/1.0/Headers
папка и так, используя pkg-config..
возможно, это обходной путь.
Если я бегу ./basic5
в терминале XQuartz я получаю следующую ошибку:
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
У кого-то еще есть идеи?
1 ответ
Для первоначальной проблемы решение зависит от вашей системы, поэтому немного сложно дать вам хороший ответ, но 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 будет загружен glib-2.0
а также gobject-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