2

我正在尝试使用 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. 我的静态常量被分配在 .bss 部分。它没有进入 .ctors 部分(这可能是链接描述文件问题?!)
  2. 即使它进入 .ctors 部分,我如何调用这些构造函数
  3. 当我使用静态 c++ 库时,我应该如何调用它们?

谢谢

4

2 回答 2

1

您很可能忘记使用collect2GNU linker。看:

于 2011-11-16T22:13:17.843 回答
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 中实现此功能。

于 2011-11-17T04:28:56.720 回答