これらの静的メンバーによるc++クラスの初期化に問題があります。詳細については、私のコードを参照してください。
ソース
header.h
#ifndef HEADER_H
#define HEADER_H
#include <string>
using namespace std;
class Staff{ public: static string str;};
class Boss{ public: static string str;};
#endif
staff.cpp
#include "header.h"
string Staff::str = "(staff)";
boss.cpp
#include "header.h"
string Boss::str = "I call " + Staff::str;
main.cpp
#include <iostream>
#include "header.h"
int main(){cout << Boss::str << endl;}
そして、ここに異なる結果を持つ多くのコンパイルコードがあります:
プリコンパイル:
g++ -c boss.cpp
g++ -c staff.cpp
ar rcs lib.a boss.o staff.o
ar rcs rlib.a staff.o boss.o
コンパイル、実行、結果:
g++ main.cpp staff.cpp boss.cpp ; ./a.out
==> I call (staff)
g++ main.cpp boss.cpp staff.cpp ; ./a.out
==> segmentation fault (core dumped)
g++ main.cpp lib.a ; ./a.out
==> segmentation fault (core dumped)
g++ main.cpp rlib.a ; ./a.out
==>segmentation fault (core dumped)
コンパイル時に巨大なオブジェクトの順序と混同するのではなく、ライブラリアーカイブを使用したいと思います。それらを解決するのを手伝ってください。