手臂-无-eabi-g++调用全局构造函数
我正在尝试使用 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。
存在多个问题:
- 我的静态常量在 .bss 部分中分配。它不是 进入 .ctors 部分(这可能是链接器脚本问题?!)
- 即使它进入 .ctors 部分,我如何调用这些构造函数
- 当我使用静态 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:
- My static const is getting allocated in .bss section. It is not
getting in .ctors sections (this may be linker script problem?!) - And even if it gets in .ctors section, how do I call these constructors
- When I use static c++ library how should I call them?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您很可能忘记使用
collect2
或 < a href="http://en.wikipedia.org/wiki/GNU_linker" rel="nofollow">GNU 链接器。请参阅:Most likely you forgot to either use
collect2
or GNU linker. See:要使用 gcc 和 RTOS,您应该有“ld”脚本,
描述将什么内容放入内存中,例如可以描述如何
处理全局构造函数的代码。
关于构造函数的调用。你可以看一下eCos的源码:
http://ecos.sourceware.org/
对于arm架构,你可以在packages/hal/arm/arch/current/src目录中查看vectors.S和hal_misc.c。 vector.S 包含类似以下内容:
并在 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:
and in hal_mics.c implementation of this function.