私はどの言語や GCC の専門家でもありません。だから私の質問は標準以下かもしれません。
GCC を使用して、何千もの CPP ファイルでコード ベースを構築しています。ファイルで、 [定義されたクラスのクラスメソッド定義を含む]A.cpp
でいくつかの関数を呼び出しているとします。ビルドはOKでした。しかし、その後、メイクファイルから除外しました。そのため、オブジェクトファイルは作成されません。しかし、この場合、から関数を参照しているため、コンパイルまたはリンクの段階でエラーが発生することが予想されていました。しかし、何もなく、コードはエラーなしでビルドされます。しかし、fn呼び出しを別のファイルに移動すると、リンカエラーが発生しました。これは、予想される動作であると私は信じています。B.cpp
B.cpp
B.h
B.o
B.o
A.cpp
B.cpp
A.cpp
C.cpp
これは予想される動作ですか?また、ビルド中に作成されたすべての関数名をリストしたマップ ファイルを確認したところ、B.cpp
B.cpp のオブジェクト ファイルが作成されていなくても、関数がマップに存在していました。私の質問は、ビルドの一部ではないファイルから関数を呼び出したときにエラーが発生しなかった理由です。存在する可能性のある残留物をクリーンアップするために、以前のビルドからすべてのオブジェクト ファイルとバイナリを削除しようとしましたが、役に立ちませんでした。手がかりがありません。誰でも助けを提供できますか?
私のマップファイルでは、通常の関数は次のようにリストされています
80010820 T __gccmain
80010828 t __gccmain_end
等
しかし、B.cpp の fns は次のようにリストされています。
U CNvThread::ProcMsgReq(unsigned, void*)
U CNvDbMgrThread::Singleton(unsigned long)