删除`.a`s

时间:2018-03-18 07:34:55

标签: linker ld symbols nm

我正在通过Cmake使用g++编译C ++静态库。我想删除与内部实现相关的符号,因此它们不会显示在nm中。 (有关共享库的信息,请参阅herehere。)

This answer告诉你如何在iOS上做这件事,我试图了解幕后发生的事情,以便我可以在Linux上进行复制。他们使用:

调用ld
  • -r / --relocatable生成可重定位输出---即生成一个输出文件,该文件又可以作为ld的输入。
  • -x / --discard-all:删除所有本地符号。

AFAICS -r将所有模块粘合到一个模块中,然后-x删除仅在该模块内使用的符号。是吗?

目前尚不清楚链接器如何“知道”哪些符号将从外部导出?它是否依赖于__attribute__((visibility("hidden/default")))案例中的.so

编辑:显然我很困惑......我认为cmake调用ld.o链接到.a。谷歌搜索+澄清上面。

问题仍然存在:如何修改构建过程以排除大多数符号?

0 个答案:

没有答案