链接器剥离未使用的类

时间:2011-10-23 09:03:55

标签: android c++ ios gcc linker

我正在使用COS,在IOS和Android下开发跨平台项目,我遇到以下情况 :

我正在编写一个用于直接从描述它们的xml文件加载场景图的库。该库有一个基本树节点类,它实现了通过它的名称使类可构造的所有功能。然后实现其他树节点,所有树节点都从该基节点类派生。这很好但有一个问题。链接器“认为”我的某些类不会被使用并将它们从库中剥离出来。我现在有一个讨厌的解决方法,有一个包含所有现有节点头的文件,在这个文件中,每个节点的一个实例正在创建和更改,以指示编译器/链接器正在使用该类。

有没有人知道一个好的设计模式可以用来自动生成所有类的必需实例?

我尝试创建放在类cpp文件中的宏,这些宏创建给定类的静态实例,但链接器仍然检测到永远不会引用这些静态实例。

或者是否有一个链接器标志可用于告诉链接器不要删除任何未使用的类?就像已经提到的:我正在使用Android(ndk 6.0)和IOS(xcode 4.2)

这个问题不会成为我项目的一个障碍,但在这里找到一个可接受的解决方案真的很不错。

1 个答案:

答案 0 :(得分:0)

  

实现定义是否使用静态存储动态初始化非局部变量   持续时间在主要的第一个陈述之前完成。如果初始化延迟到某个时间点   在第一个main语句之后,它应该在任何函数或变量的第一次使用(3.2)之前发生   在与要初始化的变量相同的翻译单元中定义。

因此,没有标准方法可以保证构建这些对象,而是将它们全部列在一个特定的位置。