|
发表于 2006-9-4 09:26:16
|
显示全部楼层
真正依赖问题,都不是小型的系统库,都是大型库,也就是说 SDL、stdc++ 都不是问题。
编译程序的时候用 static 就可以了
编译程序的时候用 static 就可以了?对于别人已经编译好的文件就没有办法了,做rpm的时候再把别人的源码拿过来再编译太浪费时间了(而且我的机器连gcc都没有装!),我只是想做一个依赖很少或没有依赖的包。
自带就行了,虽然大了很多,我打包一个mplayer+mencoder+gmplayer+win32-codecs 包含所有用到的系统库只有23M左右,看来rpm压缩算法挺好的 ,而且有些可以踢掉的,linux.so.2 glibc.so.2之类的,基本每个系统都带的吧~
关键问题是怎么更新呢?如果是版本升级,比如linux.so.2-->linux.so.3那正好,自带linux.so.2的话,也可以在只有linux.so.3的系统中安装 。对于小版本升级,比如linux.so.2.0-->linux.so.2.1,所有的程序只是使用linux.so.2这个符号连接,如果安装的时候你提供了一个linux.so.2.0,而系统中的是linux.so.2.1,那么会不会冲突呢?这点还请高人指点.
而且经常有好几种库提供相同的功能,让大家选择使用。
正是因为这一点,所以我们才有自带库的必要!虽然好几种库提供的功能相同,但是实际编译出来的binary文件只会对特定编译时使用的库依赖,举个例子wxWidget可以跨平台编译,但是你决不能把windows下编译的binary拿到linux下用,同样wxWidget可以在gtk上编译,也可以在qt上编译,但是运行的时候gtk编译的还只能在包含gtk的系统运行,而不能那到只有qt的系统中运行。 不知道我理解的对不对,如果理解有误请指正,谢谢!
补充一点,关于rpm制作,不一定非要root身份(**很危险哦!!**),所以把打包工作防在/usr/src/mBuild/稍显不方便,查了一些资料有说到:
可以通过更改 %_topdir 设置来告诉 RPM 查找和创建不同目录集中的文件。按照下面的方法在您的主目录下创建一个名为 .rpmmacros的文件:
%_topdir /home/peter/rpm #这里一定要是全路径,把peter换成你的用户名
这个文件会告诉 RPM:它先前在 /usr/src/redhat 下查找的所有目录应该改为在 /home/your_userid/rpm 下查找。 现在,您应该创建这样一个完整的目录树:~/rpm ~/rpm/SOURCES ~/rpm/SPECS ~/rpm/BUILD ~/rpm/RPMS ~/rpm/RPMS/i386 ~/rpm/SRPMS
~/rpm
~/rpm/SOURCES
~/rpm/SPECS
~/rpm/BUILD
~/rpm/RPMS
~/rpm/RPMS/i386
~/rpm/SRPMS
这样就方便多了,普通用户也可以方便建包了。详细请见:http://www.uplinux.com/www/dev/01/426.shtml |
|