关于ld.so , 安装gstreamer-0.10 (今天对gcc的认识又多了一层。哈哈)

时间:2022-02-14 02:18:39

gtreamer 是一个基于glib库(目前最新版本需要glib2.0)用来构建流媒体应用的编程框架,其目标是要简化音/视频应用程序的开发,目前已经能够被用来处理 像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime 等多种格式的多媒体数据。
1.安装gstreamer库(把我折腾坏了!!!)
目前debian下没有gstreamer的软件包,于是我选择从网上down源文件来安装此库。
configure 和 make以后,运行READE中的检测程序,一切正常。
编译gstreamer的程序需要一点技巧:用的不是简单的gcc,而是
gcc -Wall $(pkg-config –cflags –libs gstreamer-0.10) helloworld.c -o helloworld
这是pkg-config 的作用是自动找到编译该程序需要的编译器选项。该选项存在gstreamer-0.10.pc文件中,是由
configure生成的。
运行时出现下例问题:
can not find shared file : libgstreamer-0.10.so.0
用find 检查,发现此文件在/usr/local/lib/下面,是对/usr/local/lib/libgstreamer-0.10.so.0.7.0的一个符号链接。

明明在,为什么就找不到呢?
几经周折(花了两个多小时),终于发现这是ld.so这个管理动态链接库文件的工具的问题:
用ldconfig -p查,发现没有libgstreamer-0.10.so.0一项,说明ld.so找不到该文件。ld.so在默认情况下只会从/lib 和/usr/lib两个目录下找动态链接文件。因此在/usr/lib/下面加上一个到该文件的符号链接.
ln -s /usr/local/lib/libgstreamer-0.10.so.0.7.0  /usr/lib/libgstreamer-0.10.so.0

再运行程序就行了。哈哈。。。

gcc 中有个选项叫 -Wl,  (注意有逗号)此选项后面跟的是传给ld.so的参数。

ld.so跟据/etc/ld.so.cache中的内容来管理运行时动态链接的文件。

以前一直以为ld是一个静态的库文件连结器。现在又加深认真了。。。。。。

多说一句:gstreamer实在是太有意思了,一个典型的面向对象思想设计的开发环境,居然是用C写的。在FAQ里面有人问为什么不用C++,答曰:“Because we like C.”

Because we like C.

多简单的回答。这才叫为了兴趣而写程序,这才是真正的程序员的境界。

这也是我喜爱linux世界的最大原因。

写程序应该是充满个性化和趣味的集体游戏,而不是枯燥的工业化大生产。