私が持っている2つのオブジェクトファイルをリンクすることになると、GCCコンパイラが失敗しているように見えるこの問題が発生しています。オブジェクトファイルfoo1.cc
とfoo2.cc
インクルードクラスの両方が、と呼ばれるヘッダーファイルのクラスですfoo1.hh
。さらに、ヘッダーファイルfoo.hh
には、に表示されるオブジェクトインスタンスの外部宣言がありますfoo1.cc
。
foo.hh
ヘッダーファイルは、2つのソースファイルfoo1.cc
との間で一度だけ定義されることに注意してくださいfoo2.cc
。
次のコマンドを使用してソースファイルをコンパイルすると、すべてが機能しているように見えます。
g++ foo1.cc foo2.cc
上記のコマンドは、と呼ばれる実行可能ファイルを生成しますa.out
。
ソースファイルを個別にオブジェクトファイルにコンパイルしようとすると、次のようになります。
g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo1.o foo2.o
GCCコンパイラは、に関数への未定義の参照があると文句を言いfoo2.cc
ます。これらの関数はfoo1.cc
;で定義する必要があります。ただし、リンカはそれを認識しません。
GCCコンパイラでこの問題を回避する方法があるかどうか疑問に思いました。