我正在使用 SourceryGpp lite for arm 开发一个应用程序和一个库。
我没有使用标准库或默认启动文件。 因此,要调用我正在对以下代码执行的全局 ctrs:
ldr r0,=__ctors_init__
ldr r0,[r0]
mov lr,pc
bx r0
所以问题是我在静态库中定义了一些全局实例,但上面的代码从未调用过它们的构造函数。奇怪的是应用程序的全局 ctors 被成功调用,有人知道为什么吗?
最佳答案
这是静态库和运行时初始化全局变量的一个众所周知的问题。
大多数链接器将只包含满足主程序依赖性所需的静态库组件。如果没有使用编译单元中的任何对象,链接器删除永远不会添加整个编译单元,并且不会发生全局初始化的副作用。
如果使用标准库提供的启动代码,您会遇到同样的问题。
关于c++ - ctor init 不调用库中的全局 ctor 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317796/