g ++ 4.3 및 Rogue Wave 라이브러리를 사용하여 Linux 시스템에서 간단한 테스트 프로그램을 작성합니다. 여기에서 직면하는 문제는 다음 코드를 컴파일 할 수 있지만 실행하면이 줄에 세그먼트 오류가 나타납니다. _aClasses.insertKeyAndValue (100,1000);Linux에서 g ++로 RWTValHashMap을 사용하는 이상한 문제
aCC 컴파일러를 사용하여 HPUX 컴퓨터에서 동일한 조각 코드를 실행할 때. 그것은 원활하게 실행되어 나를 혼란스럽게 만듭니다. 정적 변수를 g ++에서 초기화하는 방법이 aCC와 다른 점 때문입니까? 여기에 무슨 일이 일어나는 지 아는 사람이 있습니까? 미리 감사드립니다.
A.hxx
#include <rw/tvhdict.h>
#include <rw/cstring.h>
#include <rw/rwdate.h>
#include <rw/rstream.h>
using namespace std;
class A
{
public :
A();
static void add();
struct long_hash {
unsigned long operator() (const long& x) const { return x;};
};
struct long_equal {
RWBoolean operator() (const long& x, const long& y) const { return x==y;};
};
private:
static RWTValHashMap<long, long, long_hash, long_equal> _aClasses;
};
A.cxx
#include "A.hxx"
RWTValHashMap<long, long, A::long_hash, A::long_equal> A::_aClasses;
A::A()
{
cout<<"init A"<<endl;
}
void A::add()
{
_aClasses.insertKeyAndValue(100,1000);
}
B.hxx
class B
{
public:
B();
};
B.cxx
#include "B.hxx"
#include "A.hxx"
B::B()
{
A::add();
}
는 Main.cxx
#include "A.hxx"
#include "B.hxx"
static B c;
int main() {
cout<<"main"<<endl;
return 0;
}
을 사용하는 것입니다. – user1349058
@ user1349058 정적 초기화 순서를 실제로 고칠 수 없기 때문에 문제가 발생한 후에 만 문제를 게시 할 것을 제안합니다. –
__attribute__ ((init_priority()))를 사용하여 하나의 var을 먼저 초기화하도록 수정했습니다. 또한 연결 순서 종류도 중요합니다. – user1349058