arm-none-eabi -g ++调用globral constructor

时间:2011-11-16 22:05:11

标签: c++ gcc arm rtos

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

简单代码:

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。

存在多个问题:

  1. 我的静态const是在.bss部分中分配的。它不是 进入.ctors部分(这可能是链接器脚本问题?!)
  2. 即使它进入.ctors部分,我如何调用这些构造函数
  3. 当我使用静态c ++库时,我该如何调用它们?
  4. 由于

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

要使用gcc和RTOS,你应该有“ld”脚本, 它描述了将内容放在内存中的位置,例如可以描述如何 处理全局构造函数的代码。

关于建设者的召唤。您可以查看eCos的源代码:
http://ecos.sourceware.org/
对于arm架构,您可以在packages / hal / arm / arch / current / src目录中查看vectors.S和hal_misc.c。 vector.S包含类似的内容:

bl      cyg_hal_invoke_constructors

并在hal_mics.c中实现此函数。