【问题标题】:Linker stripping unused classes链接器剥离未使用的类
【发布时间】:2011-10-23 09:03:54
【问题描述】:

我正在使用 C++ 进行跨平台项目,在 IOS 和 Android 下,我遇到以下情况 :

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

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

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

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

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

【问题讨论】:

    标签: android c++ ios gcc linker


    【解决方案1】:

    非局部变量的动态初始化是否带静态存储由实现定义 持续时间在 main 的第一个语句之前完成。如果初始化被推迟到某个时间点 在 main 的第一条语句之后,它应该出现在任何函数或变量的第一次 odr-use (3.2) 之前 在与要初始化的变量相同的翻译单元中定义。

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

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 2012-12-26
      • 2015-12-17
      • 2013-09-23
      • 1970-01-01
      • 2017-04-12
      • 2014-04-12
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多