网络上面有很多安装gstreamer的文章,但是我在此也写下,我在ubuntu下安装gstreamer的过程,以方面网友的参考。
我的安装并不是很顺利,因为我开始对gstreamer并不了解,故到网络找了很多文章,但是都没有成功,最后在网络浏览中发现了另外两篇文章,让我成功安装了gstreamer。
1. 参考文章http://hi.baidu.com/zhupan19851230/item/fdcebb515ccacdd5d48bacb8,安装了如下的gst的插件:
gstreamer0.10-tools
gstreamer0.10-x
gstreamer0.10-plugins-base
gstreamer0.10-plugins-good
gstreamer0.10-plugins-ugly
gstreamer0.10-plugins-bad
gstreamer0.10-ffmpeg
gstreamer0.10-alsa
gstreamer0.10-schroedinger
gstreamer0.10-pulseaudio
并且参考此文章,编写了测试用例:
#include <gst/gst.h>
int main(int argc, char *argv[])
{
const gchar *nano_str;
guint major,minor, micro, nano;
gst_init(&argc, &argv);
gst_version(&major, &minor,µ, &nano);
if (nano == 1)
nano_str="(CVS)";
else if (nano==2)
nano_str="(Prerelease)";
else
nano_str="";
printf("This program is linked against GStreamer %d.%d.%d %s\n", major, minor, micro, nano_str);
return 0;
}
采用介绍的方法,进行编译,但是提示不能找到gst/gst.h,在网络查找,大多都说没有配置环境变量,我按着相应的说法配置了,还算不起作用。
在不断的搜索中,终于看见一篇文章说需要安装头文件,故使用命令如下命令安装头文件:
apt-get install libgstreamer*
安装头文件后,使用如下命令进行编译:
gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10)testgstream.cpp -o testgstream
又报如下的错误:
/tmp/ccrXw6CU.o: In function `main':
testgstream.cpp:(.text+0x18): undefined reference to `gst_init'
testgstream.cpp:(.text+0x3c): undefined reference to `gst_version'
collect2: ld returned 1 exit status
继续搜索,结果发现有人说,应该按照如下的方式,进行编译:
gcc -Wall testgstream.cpp -o testgstream $(pkg-config --cflags --libs gstreamer-0.10)
安装这种方式,就编译过了。
我在网络查询了gcc参数顺序相关的问题,找到了如下的一段解释,按照这个解释就能很好的解释上面的问题了
对于C/C++编译而言,读取编译选项是按照从左到右的顺序执行的(注1) 。那么当编译器遇到源文件的时候,就开始对源文件中用到的函数进行解析,找到相对应的函数的函数体或者说是实现(Definition of Function)。这个过程是按照先遇到不能解析的函数(unresolved function),然后在源文件选项后面的一些选项中寻找可能的函数体的信息,是这样的一个顺序进行的。那么我们可以发现对于Makefile A,由于包含函数体或者函数定义信息的编译选项出现在源文件之前,那么当编译器在源文件中遇到不能解析的函数时,在源文件之后的选项中寻找相关的信息,那 么就出现了编译错误,也就是无法找到相关的函数定义。