ctor init不调用库中的全局ctor实例

DVD*_*DVD 1 c++ assembly constructor arm startup

我正在使用SourceryGpp lite为arm开发一个应用程序和一个库.

我没有使用标准库或默认启动文件.所以要调用全局ctrs我正在做以下代码:

ldr r0,=__ctors_init__
ldr r0,[r0]
mov lr,pc
bx r0
Run Code Online (Sandbox Code Playgroud)

所以问题是我在静态库中定义了一些全局实例,但它们的ctors从未被上面的代码调用过.奇怪的是应用程序的全局ctors被成功调用,有谁知道为什么?

Ben*_*igt 5

这是静态库和具有运行时初始化的全局变量的众所周知的问题.

大多数链接器将仅包含实现主程序依赖性所需的静态库的组件.如果未使用编译单元中的任何对象,则链接器删除 永远不会将编译单元作为整体添加,并且不会发生全局初始化的副作用.

有一个很好的解释这里(最后的总结在这里)

您将遇到标准库提供的启动代码的相同问题.