iOS + C:在静态框架中使用__attribute __((__ construtru __))

时间:2014-07-01 22:43:06

标签: ios c clang llvm-clang

我做了一些谷歌搜索确定的答案,但我找不到一个。

我们的iOS应用程序需要使用跨平台源代码。我已经将它们打包为静态框架,并获得了一个测试应用程序,可以成功链接并调用它。

我遇到的问题是它大量使用全局静态构造函数。

我看到的是不稳定的行为,只有一部分对象被实例化,但不是全部。

我的问题:

  1. 静态构造函数甚至可以在iOS静态的上下文中工作 LIB?
  2. 如何调试这样的问题?
  3. 谢谢!

2 个答案:

答案 0 :(得分:0)

  

静态构造函数是否在iOS静态库的上下文中工作?

它们只有在链接到可执行文件后才会开始工作,但一旦完成,它们就会起作用。

  

如何调试此类问题

有几种方法

  • 您必须假设没有调用构造函数的特定顺序。
  • 确保将构造函数链接到可执行文件中(使用nm来确定)
  • 您可以尝试使用-Wl,-all_load将所有存档的所有组件加载到可执行文件中(或-Wl,-force_load,libstatic.a只加载特定的静态存档)。

答案 1 :(得分:0)

  1. 静态库中的构造函数被不正常地调用
  2. -all_load和-force_load的使用在调用标记为函数的构造函数属性时没有任何区别
  3. 你需要做的是:
    • 确保构造函数是全局符号。通过符号'文件导出它们来实现。
    • 考虑创建一个init函数并使用链接器设置“初始化例程”来控制全局对象实例化的顺序。