コードをリンクするときに表示される動作を説明できません。多分誰かが何が起こっているのか考えている...
ビルドシステムとしてGNUautomakeツールを使用する複数ファイルのC++プロジェクトがあります(すべてLinux上)。
util.cc
ソースファイルとヘッダーファイル(とを呼び出しますutil.h
)をプロジェクトに追加し、既存のソースファイル( )が新しく追加されたファイルから関数を呼び出すようにした後、ステートメントが表示calc.cc
される場所に応じてリンクエラーが発生します。include
繰り返します:リンクステップでエラーが発生し、コンパイルは正常に実行されます!!
例:
新しいincludeステートメントを既存のステートメントの最後に置くと、次のようなエラーが発生します。
calc.cc:
#include "file1.h"
#include "file2.h"
#include "file3.h"
#include "file4.h"
#include "util.h" // new header
このバージョンは正常にコンパイルされます。しかし、リンクするとエラーが発生します(シンボルが見つかりません)!!
さて、これをに変更すると
#include "util.h" // new header
#include "file1.h"
#include "file2.h"
#include "file3.h"
#include "file4.h"
その後、コンパイルとリンクは正常に実行されます。
リンカは.o
ファイルを読み取るだけなので、これは、includeステートメントが表示される場所に応じて異なるコンテンツが生成されることを意味する必要があります。どうすればいいの?
コンパイラはg++(GCC)4.4.6です