LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: 飞龙在天

求教:如何建立一个静态的LFS?

[复制链接]
 楼主| 发表于 2010-3-10 21:00:54 | 显示全部楼层
如果说库存在的另一个理由是解决多个以此为依赖的软件的重编译问题,我说那也是没必要,首先在Linux界没有一个软件开发出来后仅依靠库的升级而自动升级地,都是不停的在出发行版本,还因为依赖库的关系导致了这个软件前后版本的不延续,比如KDE就是最好的例子,4系列必须用4系列的QT,不能用3系列的QT,直接做成一个KDE&QT软件包不就是没这么多讲究了。还有zhcon现在好像是不能用了,怎么编就是不能通过。
其次是一个深受大家欢迎的库,也就是发行软件使用率高的库,可以把他给集成到内核的一部分中吗,做为共享库,生僻的库就不该有这样的存在权利吧——静态到软件包。
回复 支持 反对

使用道具 举报

发表于 2010-3-10 21:25:04 | 显示全部楼层
呵呵,偶很绝望。

请您自己动手检验前几贴。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-10 21:33:37 | 显示全部楼层
哈哈,偶是初生牛犊(菜鸟)不怕难,乐在其中。或许有一天成为老鸟,也会倦的。
回复 支持 反对

使用道具 举报

发表于 2010-3-11 09:58:57 | 显示全部楼层
Post by 聚焦深空;2074368

甭受楼上 poet 误导:静态链接程序只受硬件、内核限制,和发行版关系不大。


甭误解,我说的是楼主想要的“选择性静态”

如果是要全部静态链接程序,当然不受发行版的影响。这个谁都认同。

但是楼主只想静态一部分库,而保留其他的动态库,这就存在一个自己包含的静态库跟发行版所带的本机动态库配合问题。而这个问题将使楼主的方案实际不可用。
回复 支持 反对

使用道具 举报

发表于 2010-3-11 10:19:12 | 显示全部楼层
静态编译浪费的硬盘空间也许不能算什么, 因为硬盘已经够大了, 不过也不太好说, 谁知道特别大型的软件静态编译会有多大体积呢. 不管怎么样, 静态编译造成的内存占用会是一个问题, 使用了同一个库的程序每个都会在内存中多占用一个库的空间, 内存和硬盘比, 空间还毕竟是有限, 大量占用内存会导致 swap 的使用, 会降低效率的.

而且, 静态库从长远看也不能算解决了依赖问题的, 因为一旦某一个库发现了什么必须升级的问题, 比如严重的安全问题之类的, 那就得重新编译 *所有* 使用了这个库的程序, 也就是说, 你还是要记住各个程序的依赖关系.
回复 支持 反对

使用道具 举报

发表于 2010-3-11 12:02:33 | 显示全部楼层
Post by poet;2074611
甭误解,我说的是楼主想要的“选择性静态”

抱歉,么注意"选择性"。
莫非您是指一个程序,一部分链接到静态库,一部分链接到动态库。
楼主标题是说"如何建立一个静态的LFS?",您怎么能冒出如此邪恶的想法。
回复 支持 反对

使用道具 举报

发表于 2010-3-11 12:09:49 | 显示全部楼层
Post by LanEast;2074617
静态编译造成的内存占用会是一个问题, 使用了同一个库的程序每个都会在内存中多占用一个库的空间, 内存和硬盘比, 空间还毕竟是有限, 大量占用内存会导致 swap 的使用, 会降低效率的.

仅多占用使用到库函数的空间,不是整个库。
静态库相当于打包的目标文件集合,ar x lib*.a 即可解包,链接到静态库和直接使用对应的 *.o 文件没本质区别。
回复 支持 反对

使用道具 举报

发表于 2010-3-11 13:09:24 | 显示全部楼层
动态链接已经是不可阻挡了,其实,想实现自依赖的方法也有,就是windows下的做法,程序载入时优先查找当前目录的库,找不到才找系统中的库,那样要改造下linux的程序加载器。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-11 13:48:05 | 显示全部楼层
自依赖发布还是比较现实一点。有些软件静态化有点困难。
用--prefix=XXX将所需包编在同一目录下,可实现自依赖。

昨天晚上很容易地将xorg给实现了。简单地删掉开发包和头文件,压缩后30M。设置下环境变量就能用。

下个目标是xfce的自依赖。单个文件的桌面肯定能实现。没有说服力

qt kde是第三个目标。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-11 14:38:21 | 显示全部楼层
Post by 聚焦深空;2074642
静态库相当于打包的目标文件集合,ar x lib*.a 即可解包,链接到静态库和直接使用对应的 *.o 文件没本质区别。

确实是这样。我一开始也是认为编译器是从库文件中抽取所需函数部分进行静态化,其实不然。仅仅是将库打包而已。

该文分析的很彻底http://blog.chinaunix.net/u1/53989/showart_1812426.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表