如何从共享库(elf/gcc)中删除未使用的引用
我正在构建一个包含公共接口的共享库,发现了一些对象文件 public.o
该共享库由 100 多个其他对象文件组成,我想最小化 .so 文件的大小。有没有办法从共享库中删除 public.o 未引用的所有符号?或者,有没有办法只保留外部“C”函数的依赖关系,剥离所有未使用的 C++ 名称?
I'm building a shared library that contains a public interface found some object file public.o
The shared library is composed of 100+ other objects files and I want to minimize the size if the .so file. Is there a way to remove of all the symbols from from the shared library that are not referenced by public.o? Alternatively, is there a way to retain only dependencies of extern "C" functions, stripping all of the unused C++ names?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看看这个手册:
http://gcc.gnu.org/wiki/Visibility
例如,它解释了如何处理 C++ 名称内容。
Look at this manual:
http://gcc.gnu.org/wiki/Visibility
it explains for example how to handle C++ names stuff.
您可以使用最新的 GCC(例如 4.6.1 版本)并在编译和(库)链接时传递
-flto
。(添加)您还可以使用可见性 属性。
但我不会担心 *.so 的大小
You might use a recent GCC (e.g. a 4.6.1 version) and pass
-flto
at compile and at (library) link time.(added) You could also play with the visibility attribute.
But I won't bother about the size of an *.so