(元の質問を編集して、より理解しやすくしました)
これが問題のプロトタイプです....
//Txn.h --- これには静的変数があり、それを含む pgms で使用できます。
class Txn
{
public:
static int i;
static void incr_int();
};
Txn::i=0;
//Txn.cpp
void Txn::incr_int() {i++;}
-> LibTxn.so
//class1.cpp を作成 -> Txn.h の静的変数を使用して pgm の 1 つを生成
#include Txn.h
Txn::incr_int()
-> LibTxn.so を使用して class1.o を生成します。
// class2.cpp -> Txn.h の静的変数を使用する別の pgm
#include Txn.h
cout<<"Txn::i;
-> LibTxn.so をインクルードして class2.o を作成
-> class1.o,class2.o を使用して class3 (exe) を作成 class1 と 2 の両方に "Txn.h" から "Txn::i=0" というステートメントがあるため、複数の宣言の問題が発生します。
-> .Txn.h から "Txn::i=0" ステートメントを削除すると、"undefined reference" エラーが表示されます。
-> .高レベルでは、この問題は一種のセッション変数を持つことであり、exe 内の任意の func から評価できるはずです。これらの関数は、exe を形成するために使用される任意の obj ファイルに含めることができます。静電気がなくても、どんなソルでも大丈夫です。しかし、別の .o ファイル (このセッション var を使用している) の作成を変更し、.o を組み合わせて exe を生成することはできません。