使用GCC和pkg-config编译

时间:2022-07-27 18:51:09

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