LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1433|回复: 3

动态库的生成问题,高手请进

[复制链接]
发表于 2011-10-21 14:27:36 | 显示全部楼层 |阅读模式
有main.o  a.o b.o c.o d.o最终生成一个可执行文件 test ,test的入口函数在main.o里有定义,生成test的这些.o文件没有带-fPIC这个参数,test文件为750K。
现在的问题是我想让这些文件生成一个库,如libtest.so ,并且只要提供一个接口就够了,也就是说把main函数改个名字如mymain,重新生成.o文件时加了-fPIC参数,gcc -o libtest.so -shared -fPIC main.o a.o b.o c.o d.o 最终生成的目标libtest.so竟然有1.1M。我想问题的原因是libtest.so 里有很多重定位信息(包含了main.o a.o b.o c.o d.o)是多余的,实际上我只要mymain这个接口就完了。为了达到这个目的该怎么办?高手指教
 楼主| 发表于 2011-10-21 17:23:06 | 显示全部楼层
看了回个贴啊,会还是不会,说下啊!看了不回贴,背冷落的感觉真不爽。。。
回复 支持 反对

使用道具 举报

发表于 2012-3-3 01:06:15 | 显示全部楼层
动态库的格式是ELF格式的,里面有很多的调式信息,符号表,这些信息在连接成可执行文件的时候会去掉,所以看到的动态库比exe文件大很多
回复 支持 反对

使用道具 举报

发表于 2012-3-7 14:19:24 | 显示全部楼层
Post by dreamance;2153783
有main.o  a.o b.o c.o d.o最终生成一个可执行文件 test ,test的入口函数在main.o里有定义,生成test的这些.o文件没有带-fPIC这个参数,test文件为750K。
现在的问题是我想让这些文件生成一个库,如libtest.so ,并且只要提供一个接口就够了,也就是说把main函数改个名字如mymain,重新生成.o文件时加了-fPIC参数,gcc -o libtest.so -shared -fPIC main.o a.o b.o c.o d.o 最终生成的目标libtest.so竟然有1.1M。我想问题的原因是libtest.so 里有很多重定位信息(包含了main.o a.o b.o c.o d.o)是多余的,实际上我只要mymain这个接口就完了。为了达到这个目的该怎么办?高手指教

有两种方法,第一种方法更加好,如下。
Look at info:gcc and look up "Function Attributes". This will tell you the different classifications of visibility of functions (you might be looking for "__attribute__ ((visibility ("internal")))".) Also, you can link with the '--retain-symbols-file=file' option with 'ld' to restrict the symbols placed in the table (visible when using 'nm'.)

LZ心理太脆弱,难当大任。
回复 支持 反对

使用道具 举报

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

本版积分规则

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