使用GCC和pkg-config編譯
gcc -Wall -g Test.c -o Test `pkg-config --cflags --libs gstreamer-0.10`
GCC編譯器是Linux下標準C的編譯器
上述編譯命令傳遞了幾個編譯選項
-Wall 開啟了所有編譯警告
-g 開啟了除錯功能,因此您可以使用編譯好的程式進行除錯,無論使用GDB或您選擇的偵錯程式
pkg-config程式是幹什麼用的?簡單的說就是向用戶程式提供相應庫的路徑、版本號等資訊的程式
$ pkg-config --cflags --libs gstreamer-0.10
-pthread -I/usr/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/libxml2 -pthread -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lxml2 -lglib-2.0
gcc -Wall -g Test.c -o Test `pkg-config --cflags --libs gstreamer-0.10`與gcc `pkg-config --cflags --libs gstreamer-0.10` -Wall -g Test.c -o Test 的區別
當我們用gcc `pkg-config --cflags --libs gstreamer-0.10` -Wall -g Test.c -o Test進行編譯的時候gcc編譯器會報一些undefined reference的錯誤,但是用gcc -Wall -g Test.c -o Test `pkg-config --cflags --libs gstreamer-0.10`就不會
原因:對於C/C++編譯而言,讀取編譯選項是按照從左到右的順序執行的。那麼當編譯器遇到原始檔的時候,就開始對原始檔中用到的函式進行解析,找到對應的函式實現。這個過程是按照先遇到不能解析的函式,然後在原始檔後面的一些選項中尋找可能的函式體資訊。
對於gcc `pkg-config --cflags --libs gstreamer-0.10` -Wall -g Test.c -o Test, 由於包含函式體或者函式定義資訊的編譯選項出現在原始檔之前,那麼當編譯器在原始檔中遇到不能解析的函式時,在原始檔之後的選項中尋找相關的資訊,那麼就出現了編譯錯誤,也就是無法找到相關的函式定義