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

标签 c++ assembly constructor arm startup

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

我没有使用标准库或默认启动文件。 因此,要调用我正在对以下代码执行的全局 ctrs:

ldr r0,=__ctors_init__
ldr r0,[r0]
mov lr,pc
bx r0

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

最佳答案

这是静态库和运行时初始化全局变量的一个众所周知的问题。

大多数链接器将只包含满足主程序依赖性所需的静态库组件。如果没有使用编译单元中的任何对象,链接器删除永远不会添加整个编译单元,并且不会发生全局初始化的副作用。

有一个很好的解释here (最终总结 here )

如果使用标准库提供的启动代码,您会遇到同样的问题。

关于c++ - ctor init 不调用库中的全局 ctor 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317796/

相关文章:

hibernate - org.hibernate.hql.ast.QuerySyntaxException : Unable to locate appropriate constructor

javascript - 从动态创建的子构造函数调用父构造函数

c++ - gtk_text_buffer_create_tag 创建警告 : 'GtkTextTag' has no property named '\u0004'

c++ - <ctime> 中的 clock() 函数如何访问系统时钟?

c++ - 如何初始化boost::process::child(boost process 0.5)?

c++ - 来自 C++ 数组的实时颜色图

windows - 使用单字节指令开始 x64 函数是否合法?

macos - 我在 ASM 中的 strdup

c - 如何在 Windows 上找到系统调用?

Java 类构造函数更改输入参数 - MiniMax