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, 由於包含函數體或者函數定義信息的編譯選項出現在源文件之前,那麼當編譯器在源文件中遇到不能解析的函數時,在源文件之後的選項中尋找相關的信息,那麼就出現了編譯錯誤,也就是無法找到相關的函數定義