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, 由于包含函数体或者函数定义信息的编译选项出现在源文件之前,那么当编译器在源文件中遇到不能解析的函数时,在源文件之后的选项中寻找相关的信息,那么就出现了编译错误,也就是无法找到相关的函数定义