0

C++ プロジェクトを Xcode 3.2.6 から Xcode 4.5.1 にアップグレードして以来、最も奇妙な #include ファイルの問題が発生しました。静的にリンクされたライブラリの 1 つの #include ヘッダー ファイルが見つかりません。プロジェクト全体で他に未定義のシンボル エラーはありません。

#include は、プレフィックス ヘッダー「MacClient_Prefix.pch」にあります (ヘッダーをプリコンパイルしていません)。

#include "Framework/Base/BaseEnvironment.h"

このヘッダー ファイル (BaseEnvironment.h) は、静的にリンクされたライブラリに関連するまったく別のフォルダー階層にあります。

エラー:

/Users/StephenDev/Documents/dev/WordMenu/Projects/MacClient/Xcode/WordMenuBaseEnv.h
/Users/StephenDev/Documents/dev/WordMenu/Projects/MacClient/Xcode/WordMenuBaseEnv.h:26:10: 'Framework/Base/BaseEnvironment.h' file not found
/Users/StephenDev/Documents/dev/WordMenu/Projects/MacClient/Xcode/<built-in>:148:2: In file included from <built-in>:148:
/Users/StephenDev/Documents/dev/WordMenu/Projects/MacClient/Xcode/<command line>:4:10: In file included from <command line>:4:
/Users/StephenDev/Documents/dev/WordMenu/Projects/MacClient/Xcode/MacClient_Prefix.pch:9:10: In file included from
     /Users/StephenDev/Documents/dev/WordMenu/Projects/MacClient/Xcode/MacClient_Prefix.pch:9:

プロジェクトのユーザー ヘッダー ファイルのパスが正しく設定されていることは確かです。

奇妙なことに、#include をコメント アウトすると、コードの残りの部分でシンボルが欠落しているという実際のエラーが何百も発生します。明らかに、プロジェクト ファイルのコンパイルにプレフィックス ヘッダーを使用すると、ファイルが検出されます。

#include でヘッダー ファイルへのフル パスを明示的に指定しようとさえしましたが、プロジェクト ビルドの残りのインクルードが壊れてしまいます。

ビルド オプションのインクルード パスはプロジェクトに関連しており、この問題に関連している可能性があると思います。この問題は、派生データまたは中間体のインクルード パスと関係がありますか?

エラーのある「メイン」プロジェクトに含まれる静的にリンクされたライブラリのビルド プロジェクトは、ヘッダー ファイルを「パブリック」に定義します。ただし、メイン プロジェクトのクリーン ビルド/再ビルドは、(現在) 静的にリンクされたライブラリを再ビルドするようには見えません。

4

1 に答える 1

1

奇妙なことに、#include をコメント アウトすると、コードの残りの部分でシンボルが欠落しているという実際のエラーが何百も発生します。明らかに、プロジェクト ファイルのコンパイルにプレフィックス ヘッダーを使用すると、ファイルが検出されます。

#include エラーは致命的であるため、コンパイラは #include の欠落に起因するすべてのエラーの表示を続行しません。

#include <foo>
There's no way this is legal C++...

結果:

main.cpp:1:10: fatal error: 'foo' file not found
#include <foo>
         ^
1 error generated.

他にエラーがないという事実は、2 行目が有効な C++ コードとして解釈されたことを意味しません。

于 2013-03-27T18:38:30.483 に答える