|
发表于 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心理太脆弱,难当大任。 |
|