私は一緒に持っている2つのオブジェクトファイルをリンクする際にGCCコンパイラが失敗しているように見えるこの問題を抱えています。両方のオブジェクトファイルfoo1.cc
とfoo2.cc
には、foo1.hh
というヘッダーファイルのクラスが含まれています。また、ヘッダファイルfoo.hh
には、foo1.cc
に表示されるオブジェクトインスタンスの外部宣言があります。同じヘッダファイルを使用してC++でオブジェクトファイルをコンパイルおよびリンクする方法は?
ヘッダファイルfoo.hh
は、2つのソースファイルfoo1.cc
とfoo2.cc
の間で1回のみ定義されることに注意してください。
私は、次のコマンドを使用してソースファイルをコンパイルすると、すべてが動作しているようです:
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コンパイラでこの問題を回避する方法があるのだろうかと思っていました。
ようこそ!最も有益な答えを必ず受け入れるようにしてください。 – jncraton
あなたは答えを受け入れるべきです。 – Walter