AIX上的std :: locale :: operator =(std :: locale const&)崩溃

时间:2017-04-19 08:18:09

标签: c++ gcc rpm aix

我对AIX有点新,并且遇到了一个奇怪的问题。我有两个AIX机器,我的C ++应用程序在一个上运行而在另一个上崩溃。

当我检查安装的包(rpm -qa)时,我观察到一个区别,对于第一台机器,所有rpm都以.ppc扩展名结束,而第二台则不是。我的cpp app在第二台机器上完美运行。

我怀疑这可能是造成这个问题的原因但不确定。

PS:显示两者之间的差异。 Difference between two

堆栈追踪:

    Program terminated with signal SIGSEGV, Segmentation fault.
#0  0xd0bded2c in std::locale::operator=(std::locale const&) () from /opt/freeware/lib/libstdc++.a(libstdc++.so.6)
(gdb) bt
#0  0xd0bded2c in std::locale::operator=(std::locale const&) () from /opt/freeware/lib/libstdc++.a(libstdc++.so.6)
#1  0xd0bdeee0 in std::ios_base::_M_init() () from /opt/freeware/lib/libstdc++.a(libstdc++.so.6)
#2  0xd0bdede4 in std::basic_ios<char, std::char_traits<char> >::init () from /opt/freeware/lib/libstdc++.a(libstdc++.so.6)
#3  0x100b618c in Logging::Logging (this=0x20086438, filename=..., level=4) at Logging.cpp:404
#4  0x1005d96c in main (argc=<error reading variable>, argv=<error reading variable>) at  _start_ :141
warning: (Internal error: pc 0x100001e3 in read in psymtab, but not in symtab.)

warning: (Internal error: pc 0x100001e4 in read in psymtab, but not in symtab.)

代码快照:

string logFile = "test.txt"
Logging* logger = new Logging(logFile,4);

// Logging Constructor     
Logging::Logging(const string &filename,loglevel): logfilename(filename),level(loglevel) {
}

1 个答案:

答案 0 :(得分:0)

我只是面临相同的问题,并且能够通过在g ++编译器的makefile上禁用优化标志(例如-O2)来解决此问题。我的makefile包含

CC = g++ CC_FLAGS = -g3 -ggdb -Wall -std=c++11 -DDEBUG -pthread -O2

其中显示了来自gdb的回溯 std::locale::operator=(std::locale const&) ()

没有标志“ -O2”就不会再出现

CC = g++ CC_FLAGS = -Wall -std=c++11 -DDEBUG -pthread