Ubuntu搭建gstreamer开发环境(转)

1:Ubuntu已经安装了gstreamer库,因此只需要再安装几个开发库即可,是

libstreamer0.10-0

libstreamer0.10-dev

libstreamer0.10-0-dbg

在新立得里选中应用即可

2:测试gstreamer开发库

#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, &micro, &
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
;
}

 

 

3,编译运行

gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) hello.c - o hello
.
/
hello

运行结果:

This program is linked against GStreamer 0.10.22
转自:http://hi.baidu.com/a%CC%C7%B3%B4%C0%F5%D7%D3a/blog/item/3a082b2f71f66724359bf724.html
      最近想试着用Qt做一个简单的播放器,因为想试着通过GStreamer得到mp3标签的图片,所以 才接触到GStreamer,转载这篇文件主要其实想认识Linux 下"pkg-config" 这个工具!下面再转载一篇对这个工具介绍很清楚的文章!
      自己被Ubuntu养懒了,确实懒了,懒得自己连系统的某些工具的用处都不知道。比如pkg-config

以前一直不知道,Linux下那么多库,在./configure时时怎么判断它们存不存在的,难道是靠递归搜索?现在我才知道我zt了,pkg-config这个命令和/*/lib/pkgconfig下的一些.pc文件才是主角。

每个.pc文件定义了库的名字、路径、编译选项等,比如glib-2.0.pc文件:

prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib
includedir=${prefix}/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: Glib
Description: C Utilitiy Library
Version: 2.14.4
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include

configure到某个时刻的时候,pkg-config命令会首先去PKG_CONFIG_PATH定义好的路径下搜索库名字对应的.pc文件,找到了就行了,等会儿make的时候就可以通过正则表达式取出libs和cflags的值来使用,否则的话就报错。

刚才pkg-config提示没有libgnomeui-2.0的库,我找了一下,找到了这个.pc文件呀,但是pkg-config就是说找不到。我脑子抽筋了那么几分钟,终于意识到,在~/.bashrc中,添加libgnomeui-2.0所在的文件夹路径到PKG_CONFIG_PATH下:

1
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig

然后source ~/.bashrc就可以了。

顺便说一句,编译真是个惊心动魄的过程啊,不亚于看恐怖小说。

凌晨的时候系统坏了,现在重装好,配置好,恢复到了凌晨的状态了,sigh - b

你在Unix下开发过软件吗?写完一个程序,编译运行完全正常,在你本机上工作得好好的,你放到源代码管理系统中。然后,告诉你的同事说,你可以取下来用了。这时,你长长的出了一口气,几天的工作没有白费,多么清新的空气啊,你开始飘飘然了。

Hi,怎么编译不过去?”你还沉浸在那种美妙的感觉之中,双臂充满着力量,似乎没有什么问题能难倒你的。正在此时,那个笨蛋已经冲着你嚷开了。

“不会吧,我这边好好的!”表面上你说得很客气,其实,你心里已经骂开了,真笨,不知道脑子干嘛用的。也许,你想的没错,上次,他犯了一个简单的错误,不是你一去就解决了吗。

他喊三次之后,你不得不放下你手上的工作,刚才那种美妙的感觉已经消失得无影无踪了,要不是你把情绪控制得很好,一肚子气就要撒在他身上了。你走到他的电脑前,键入make,优雅的按下回车。怎么可能出错呢?你信心十足。然而,屏幕上的结果多少有点让人脸红,该死的,libxxx.so怎么会让不到呢?

你在/usr目录中查找libxxx.so,一切都逃不过你的眼睛。奇怪,libxxx.so怎么在/usr/local/lib下,不是应该在/usr/lib下的吗?这你可不能怪别人,别人想安装在哪里都行,下次还可能安装到/lib目录下呢。

以上的场景并非虚构,我都经历过好几次,明明在本机上好好的,在别人的机器上连编译都过不去。可能两人的操作系统一模一样,需要的库都安装上,只是由于个人喜好不同,安装在不同的目录而已。遇到这种情况,每次都技巧性的绕过去了,用的补丁型的方法,心里老惦记其它地方能不能工作。

今天我们要介绍的pkgconfig,为解决以上问题提供了一个优美方案。从此,你再也不为此担忧了。Pkgconfig提供了下面几个功能:

1.         检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。

2.         获得编译预处理参数,如宏定义,头文件的位置。

3.         获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。

4.         自动加入所依赖的其它库的设置。

这一切都自动的,库文件安装在哪里都没关系!

在使用前,我们说说pkgconfig的原理,pkgconfig并非精灵,可以凭空得到以上信息。事实上,为了让pkgconfig可以得到这些信息,要求库的提供者,提供一个.pc文件。比如gtk+-2.0pc文件内容如下:

prefix=/usr

exec_prefix=/usr

libdir=/usr/lib

includedir=/usr/include

target=x11

 

gtk_binary_version=2.4.0

gtk_host=i386-redhat-linux-gnu

 

Name: GTK+

Description: GIMP Tool Kit (${target} target)

Version: 2.6.7

Requires: gdk-${target}-2.0 atk

Libs: -L${libdir} -lgtk-${target}-2.0

Cflags: -I${includedir}/gtk-2.0

 

这个文件一般放在/usr/lib/pkgconfig/或者/usr/local/lib/pkgconfig/里,当然也可以放在其它任何地方,如像X11相关的pc文件是放在/usr/X11R6/lib/pkgconfig下的。为了让pkgconfig可以找到你的pc文件,你要把pc文件所在的路径,设置在环境变量PKG_CONFIG_PATH里。

 

使用方法很简单,比如,我们要使用gtk+的库编译一个程序:

gcc -g arrow.c -o arrow  `pkg-config "gtk+-2.0 > 2.0.0" --cflags --libs`

 

只要安装了gtk+2.0,不管它在哪里,编译都是正常的。这是不是简单很多了?

 

转载 :http://dpinglee.blog.163.com/blog/static/144097753201071832452981/

  

 

你可能感兴趣的:(工作,正则表达式,ubuntu,Path,工具,gtk)