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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章