C++ GStreamer:与C+中的GST#u对象斗争+;

C++ GStreamer:与C+中的GST#u对象斗争+;,c++,gstreamer,C++,Gstreamer,在过去的几天里,我开始研究GStreamer 1.0。第一个示例运行良好,但现在我需要GST\u对象(obj) 当我尝试使用它编译示例时,编译器输出对符号“g\u type\u check\u instance\u cast”的未定义引用。我正在使用EclipseLuna进行编译。我的操作系统是Ubuntu 14.04,作为一个编译器,我使用GCC。在Eclipse中,我添加了 /usr/lib/x86_64-linux-gnu/glib-2.0/include /usr/include/gst

在过去的几天里,我开始研究GStreamer 1.0。第一个示例运行良好,但现在我需要
GST\u对象(obj)

当我尝试使用它编译示例时,编译器
输出对符号“g\u type\u check\u instance\u cast”的未定义引用
。我正在使用EclipseLuna进行编译。我的操作系统是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++中添加外部库是新手,所以编译器失败时我不知道。 我使用过的简短代码片段:
#包括

#包括

使用名称空间std

intmain(intargc,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;
}`如果我编译

#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的顺序链接。如果颠倒顺序,则链接将失败


我的猜测是,如果您在gstreamer之前链接glib,那么它将失败,因为gstreamer依赖于glib的符号

你能不能把调用GST_对象(obj)的部分代码包括进来?好的,这样它也可以在我的机器上运行,但我想直接在Eclipse中编译。看来我的配置不正确。你知道我要添加什么才能让它运行吗?好的,那么pkg config给你的是include(在我的系统“pkg config--cflags gstreamer-1.0”->“-pthread-I/usr/include/gstreamer-1.0-I/usr/include/glib-2.0-I/usr/lib/glib-2.0/include”)和你必须添加的库标志(使用“--libs”选项)。一种黑客方法是将其粘贴到eclipse中。您可能想在主题上阅读这个“”,Eclipse的编译器输出是:g++-I/usr/lib/x86_64-linux-gnu/glib-2.0/include-I/usr/include/gstreamer-1.0-I/usr/include/glib-2.0-O0-g3-Wall-c-fmessage length=0-MMD-MP-MF“src/Test3.d”—MT“src/Test3.d”—o“src/Test3.o”“../src/Test3.cpp”完成的建筑:./SRC/Test3.CPP构建目标:gStultTest2调用:GCC C++链接器G++-O“GrStestTest2”./src/GStreamTest2.o./src/Test2.o./src/Test3.o-lglib-2.0-lgstnet-1.0-lgstbase-1.0-lgstcheck-1.0-lgstreamer-1.0-lgstcontroller-1.0/usr/bin/ld:./src/Test3.o:对符号“g_type_check_instance_cast”的未定义引用相关符号(“g_type_check_instance_cast”)位于libgobject-2.0中。您可以将“-lgobject-2.0”添加到链接器。在我的系统上,“pkg config--libs gstreamer-1.0”返回“-lgstreamer-1.0-lgobject-2.0-lglib-2.0”,所以它应该再次工作…谢谢。“gobject-2.0”在图书馆部分缺失。现在它起作用了。很好,如果所需的libgobject-2.0根本没有添加到链接器中,那么链接将失败。对我来说,这似乎不是订购的问题。
g++ -o main main.cc  `pkg-config --cflags --libs gstreamer-1.0`