Я начал заглядывать в GStreamer 1.0 за последние дни. Первые примеры работали нормально, но теперь я нахожусь в точке, где мне нужен GST_OBJECT(obj)
.
Когда я пытаюсь скомпилировать пример, используя его, компилятор outputs undefined reference to symbol 'g_type_check_instance_cast'
. Я использую Eclipse Luna для компиляции. Моя ОС - Ubuntu 14.04, в качестве компилятора я использую GCC. В Eclipse я добавил /usr/lib/x86_64-linux-gnu/glib-2.0/include
/usr/include/gstreamer-1.0
/usr/include/glib-2.0
к путям включения компилятора C++ и glib-2.0
gstnet-1.0
gstbase-1.0
gstcheck-1.0
gstreamer-1.0
gstcontroller-1.0
в библиотеки компоновщиков GCC C++. Я новичок в добавлении внешних библиотек в C++, поэтому я понятия не имею, когда компилятор терпит неудачу.
Короткие фрагменты кода, которые я использовал: #include <iostream>
#include <gst/gst.h>
using namespace std;
int main(int argc, char **argv) {
GstElement * myFirstElement;
gst_init(&argc, &argv);
myFirstElement = gst_element_factory_make("fakesrc", "source");
if(!myFirstElement)
return -1;
gst_object_unref(GST_OBJECT(myFirstElement));
return 0;
}"
Ваша проблема может быть упорядочением библиотек. При связывании библиотек заказ действительно имеет значение. Например, если libA требует символа из libB, тогда вам нужно связать его в порядке -lA -lB. Если вы отмените заказ, ссылка не завершится.
Я предполагаю, что если вы связали glib перед gstreamer, тогда он потерпит неудачу, поскольку gstreamer зависит от символов из glib.
Ну, если я скомпилирую
#include <iostream>
#include <gst/gst.h>
using namespace std;
int main(int argc, char **argv)
{
GstElement *myFirstElement;
gst_init(&argc, &argv);
myFirstElement = gst_element_factory_make("fakesrc", "source");
if(!myFirstElement)
return -1;
gst_object_unref(GST_OBJECT(myFirstElement));
return 0;
}
с помощью
g++ -o main main.cc 'pkg-config --cflags --libs gstreamer-1.0'
все работает нормально. Возможно, проблема с вашей настройкой...