Arm C++;当我试图访问全局对象的字符串成员时,代码崩溃

Arm C++;当我试图访问全局对象的字符串成员时,代码崩溃,arm,g++,threadx,Arm,G++,Threadx,我在资源有限的基于ARM的ThreadX平台上运行此程序。代码是使用GCC g++编译器构建的。我看到一个奇怪的崩溃,我想了解更多 我有一个类,它的成员是字符串。我看到当我将对象设置为全局时程序崩溃(下面的案例1)。它在print语句中崩溃,我试图找到string对象的长度。但是,当我创建一个本地对象(下面的案例2)时,程序不会崩溃。当我使用“新建”创建对象时,它不会崩溃(案例3)。我大致知道可能会出什么问题(构造函数调用没有发生?全局对象很棘手等等)。我想了解引擎盖下可能出现的问题 class

我在资源有限的基于ARM的ThreadX平台上运行此程序。代码是使用GCC g++编译器构建的。我看到一个奇怪的崩溃,我想了解更多

我有一个类,它的成员是字符串。我看到当我将对象设置为全局时程序崩溃(下面的案例1)。它在print语句中崩溃,我试图找到string对象的长度。但是,当我创建一个本地对象(下面的案例2)时,程序不会崩溃。当我使用“新建”创建对象时,它不会崩溃(案例3)。我大致知道可能会出什么问题(构造函数调用没有发生?全局对象很棘手等等)。我想了解引擎盖下可能出现的问题

class A
{

    public:
        void printS()
        {
            printf(" string sz = %d \r\n", s.size());
        };
        string s;

};
案例1:

A a;
void main()
{
    /* crashes inside the function prints while accessing the string s */
    a.printS();
}
案例2:

void main()
{
    A a;  
    a.printS(); //works
}
案例3:

A* a;
void main()
{   a = new A();
    a->printS(); //works
}

这两种情况都有效你只是打错了

print instead of **printf**

很抱歉那是个打字错误。更正了。这不是根本原因。我测试了代码块以确保:/MinGW gcc。。。。你能告诉我你的错误吗?谢谢。未报告任何错误。这是一个运行threadx RTOS的嵌入式系统。我没有任何JTAG调试器支持。好吧,没有调试器,这就像是在黑暗中拍摄。但我唯一能想到的是,全球A;由于MingCW没有问题,软件不允许使用。试着向他们的支持寻求帮助?是的,似乎没有调用静态对象构造函数。也许,问题出在链接器脚本中。检查它是否包含condTructor的行(
.init\u array
部分)。