arm-none-eabi- c++调用全局构造函数
arm-none-eabi-g++ calling globral constructor
我正在尝试将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部分(这可能是链接器脚本问题?!)
- 即使它在。tors section中,我如何调用这些构造函数
- 当我使用静态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中实现这个函数
相关文章:
- 修改程序的入口点时未调用全局变量的构造函数
- 如何在全局变量的构造函数之前运行函数
- 何时调用全局对象的构造函数?
- C++:链接库两次,全局构造函数运行两次吗?
- std::atexit 从全局对象的构造函数调用时的排序
- 如何强制调用类的全局实例的析构函数和构造函数(以便"re-init"类实例)
- 从全局对象构造函数停止监视器计时器
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 未显式引用对象的全局对象构造函数在最终二进制文件 - LD 中被丢弃
- 为什么 Clang++ 不在另一个静态库中运行全局对象构造函数?
- C++-全局静态对象和本地静态对象的构造函数调用不同
- 为什么GCC将对全局实例构造函数的调用放在不同的部分(取决于目标)
- 为什么全局对象构造函数只打印 Arduino 中的前 2 个字符
- 您如何确定全局构造函数的优先级
- 全局变量构造函数/析构函数是否需要线程保护
- 具有私有构造函数的类的全局对象
- 当到达main()时,由全局变量的构造函数初始化的静态模板变量为空
- lib文件中的c++全局类构造函数
- 如何在c++头文件中声明对象的构造函数后使用全局对象
- 未调用全局对象构造函数