手臂-无-eabi-g++调用全局构造函数

发布于 2024-12-15 17:12:24 字数 714 浏览 3 评论 0原文

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

简单的代码:

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++ 库时,我应该如何调用它们?

谢谢

I am trying to port c++ application to arm board with gcc tools (using RTOS).
But my static const constructors are not being called.

Simple code:

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);

I provide class definitions. But when I call this with TestInitClass::TestClassObj.getM() it returns me 0.

There are multiple problems:

  1. My static const is getting allocated in .bss section. It is not
    getting in .ctors sections (this may be linker script problem?!)
  2. And even if it gets in .ctors section, how do I call these constructors
  3. When I use static c++ library how should I call them?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

往事风中埋 2024-12-22 17:12:24

您很可能忘记使用 collect2 或 < a href="http://en.wikipedia.org/wiki/GNU_linker" rel="nofollow">GNU 链接器。请参阅:

两个我 2024-12-22 17:12:24

要使用 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 中实现此函数。

To use gcc and RTOS, you should have "ld" script,
that describe where put what in memory, it may for example describe how
to handle code of global constructors.

About calling of constructors. You can look at source code of eCos:
http://ecos.sourceware.org/
For arm architecture you can look at vectors.S and hal_misc.c at packages/hal/arm/arch/current/src directory. vector.S contains something like:

bl      cyg_hal_invoke_constructors

and in hal_mics.c implementation of this function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文