iOS+;C:在静态框架中使用uu属性u((u构造函数u))
我在谷歌上搜索了好几次,想找到一个明确的答案,但都找不到 我们的iOS应用程序需要使用跨平台资源。我已经将它们打包为静态框架,并获得了一个测试应用程序来成功链接并调用它 我遇到的问题是,它大量使用全局静态构造函数 我看到不稳定的行为,只有一部分对象被实例化,但不是全部 我的问题是:iOS+;C:在静态框架中使用uu属性u((u构造函数u)),ios,c,clang,llvm-clang,Ios,C,Clang,Llvm Clang,我在谷歌上搜索了好几次,想找到一个明确的答案,但都找不到 我们的iOS应用程序需要使用跨平台资源。我已经将它们打包为静态框架,并获得了一个测试应用程序来成功链接并调用它 我遇到的问题是,它大量使用全局静态构造函数 我看到不稳定的行为,只有一部分对象被实例化,但不是全部 我的问题是: 静态构造函数是否在iOS静态上下文中工作 自由党 如何调试这样的问题 谢谢 静态构造函数是否在iOS静态库的上下文中工作 它们只有在链接到可执行文件后才开始工作,但一旦完成,它们就会工作 如何调试这样的问题 有几种方
- 您必须假定构造函数的调用没有特定的顺序
- 确保构造函数链接到可执行文件中(使用nm来确定)
- 您可以尝试使用
将所有归档文件的所有组件加载到可执行文件中(或-Wl,-all\u load
仅加载特定的静态归档文件)-Wl,-force\u load,libstatic.a
- 确保构造函数是全局符号。通过符号文件导出它们来完成此操作
- 考虑创建一个init函数,并使用链接器设置“初始化例程”来控制全局对象实例化的顺序李>
这些标志(-Wl,-all_load&-Wl,-force_load)是作为静态库构建的一部分传递的,还是作为链接到静态库的应用构建的一部分传递的?此外,我对框架进行了研究,发现通过相同的宏函数实例化的对象的符号值不稳定:(1)所有符号都以“t”[非外部](2)有些符号具有地址/偏移值;其他人的地址/偏移量为00000000。从逻辑上讲,这些标志可能应该在应用程序的项目中使用。我会给它一个镜头和更新。-所有的加载和-强制加载没有任何区别。