arm-none-eabi- c++调用全局构造函数

arm-none-eabi-g++ calling globral constructor

本文关键字:构造函数 全局 调用 c++ arm-none-eabi-      更新时间:2023-10-16

我正在尝试将c++应用程序移植到带有gcc工具的arm板(使用RTOS)。但是我的静态构造函数没有被调用。

简单代码:

class TestClass {
public:
    TestClass();
    TestClass(int m);
    TestClass(const TestClass& other);
    ~TestClass();
    int getM() const;
    const TestClass& operator = (const TestClass& other);
private:
    int m;    
};
class TestInitClass {
    static const TestClass TestClassObj;
};
const TestClass TestInitClass::TestClassObj = TestClass(5);

我提供类定义。但是当我用TestInitClass::TestClassObj.getM()调用它时,它返回0。

有多个问题:

    我的静态const被分配在。bss节。事实并非如此进入。tors部分(这可能是链接器脚本问题?!)
  1. 即使它在。tors section中,我如何调用这些构造函数
  2. 当我使用静态c++库时,我应该如何调用它们?

谢谢

很可能您忘记使用collect2或GNU链接器。看到:

  • 全局构造函数没有被调用
  • 我应该使用GNU链接器,还是应该使用"collect"?

要使用gcc和RTOS,你应该有"ld"脚本,它描述了在哪里存储了什么,例如,它可能描述了如何存储处理全局构造函数的代码。

关于调用构造函数。你可以查看eCos的源代码:
http://ecos.sourceware.org/
对于臂结构,你可以看向量。. S和在packages/hal/arm/arch/current/src目录下的hal_misc.c向量。S包含如下内容:

bl      cyg_hal_invoke_constructors

和在hal_mics.c中实现这个函数