Chinaunix

标题: 如何用GCC把多个.so文件合并成一个.so文件 [打印本页]

作者: catoran    时间: 2009-07-08 10:28
标题: 如何用GCC把多个.so文件合并成一个.so文件
问题是这样的,我现在分别编译出了三个.so文件,分别是a.so b.so c.so
现在想通过gcc把这三个.so文件连成一个.so
不是用.o文件,直接用.so文件,不知道能不能实现?实现的命令是什么?
谢谢!
作者: MMMIX    时间: 2009-07-08 10:29
原帖由 catoran 于 2009-7-8 10:28 发表
问题是这样的,我现在分别编译出了三个.so文件,分别是a.so b.so c.so
现在想通过gcc把这三个.so文件连成一个.so
不是用.o文件,直接用.so文件,不知道能不能实现?实现的命令是什么?
谢谢!

Why you want to do this?
作者: catoran    时间: 2009-07-08 10:31
原帖由 MMMIX 于 2009-7-8 10:29 发表

Why you want to do this?


因为这三个.so的空间加起来太大了,想通过连接成一个.so来压缩一点点空间
作者: MMMIX    时间: 2009-07-08 11:12
原帖由 catoran 于 2009-7-8 10:31 发表


因为这三个.so的空间加起来太大了,想通过连接成一个.so来压缩一点点空间

为什么你觉得把它们合并在一起使用的空间会小?
作者: catoran    时间: 2009-07-08 12:06
原帖由 MMMIX 于 2009-7-8 11:12 发表

为什么你觉得把它们合并在一起使用的空间会小?


我已经用所有相关的.o文件做成了一个总的.so文件,总空间比三个加起来要小
用这样的方法用做,Makefile改的东西太多,且还有几个这样的工作要做,工作量太大
作者: connet    时间: 2009-07-08 13:50
不要编成so, 编成 3个 .a 这样 make file 改动少,把 .a连接起来即可
作者: MMMIX    时间: 2009-07-08 13:54
原帖由 catoran 于 2009-7-8 12:06 发表


我已经用所有相关的.o文件做成了一个总的.so文件,总空间比三个加起来要小

少了多少?你有没有 strip?
作者: emmoblin    时间: 2009-07-09 00:13
对动态库不了解,我觉得要是有特殊的工具应该可以
作者: catoran    时间: 2009-07-09 11:58
原帖由 connet 于 2009-7-8 13:50 发表
不要编成so, 编成 3个 .a 这样 make file 改动少,把 .a连接起来即可

用静态库的话,空间会更大啊
作者: catoran    时间: 2009-07-09 11:59
原帖由 MMMIX 于 2009-7-8 13:54 发表

少了多少?你有没有 strip?

空间小了4.2%
所有的都用了strip
作者: MMMIX    时间: 2009-07-09 14:58
原帖由 catoran 于 2009-7-9 11:59 发表

空间小了4.2%
所有的都用了strip

那个空间变小是因为 strip,不是因为你把它们做成了 .so
作者: catoran    时间: 2009-07-09 15:23
原帖由 MMMIX 于 2009-7-9 14:58 发表

那个空间变小是因为 strip,不是因为你把它们做成了 .so


不管是不是因为strip,我要想空间变的小一点,就必须先把几个.so合成一个.so
作者: www1862    时间: 2009-07-09 18:57
给楼主一个参考
英文原文: http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
中文翻译: http://blog.chinaunix.net/u1/45394/showart_439396.html
作者: qtdszws    时间: 2009-07-10 07:41
so是连接后的动态库,各种内部符号与地址都已经被重定位,且重定位信息被删除,再合并这些so,无法处理内部符号的重定位问题,那么应该是不可行的
作者: catoran    时间: 2009-07-10 09:17
www1862 ,qtdszws  谢谢两位的帮助




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2