2014-07-21 128 views
0

我在最近幾天開始關注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++,所以編譯器失敗時我不知道。GStreamer:在C++中掙扎着使用GST_OBJECT

短代碼片段我用:
#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; 

}`

+0

請問您能否包含調用GST_OBJECT(obj)的代碼部分? –

回答

0

好吧,如果我編譯使用

g++ -o main main.cc `pkg-config --cflags --libs gstreamer-1.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; 
} 

工作正常。可能是您的設置有問題...

+0

好吧,以這種方式它也適用於我的機器,但我想直接在Eclipse中編譯。所以看起來我的配置不正確。任何想法,我必須添加它才能運行? – Flow

+0

好的,那麼pkg-config會給你的包括(在我的系統上「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中。您可能想閱讀關於主題 – hfhc2

+0

的「http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.cdt.doc.user%2Freference%2Fcdt_u_prop_general_pns_libpath.htm」編譯器輸出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。○」 「../src/Test3.cpp」 成品建築:../src/Test3.cpp 建築目標:GStreamTest2 調用:GCC C++鏈接器 克++ -o 「GStreamTest2」 ./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'的未定義引用 – Flow

0

您的問題可能是庫的鏈接順序。鏈接庫時,訂單實際上很重要。例如,如果libA需要libB中的符號,則需要按照-lA -lB的順序進行鏈接。如果您顛倒了順序,那麼鏈接將失敗。

我的猜測是,如果你在gstreamer之前連接了glib,那麼它會失敗,因爲gstreamer依賴於來自glib的符號。

+0

那麼,如果所需的libgo bject-2.0根本沒有添加到鏈接器中,那麼鏈接將失敗。這似乎不是我訂購的問題。 – hfhc2