Eclipse用のCDTをセットアップし、簡単なHello World Cプログラムを作成しました。
#include <stdio.h>
int main(void){
puts("Hello, world.");
return 0;
}
プログラムは正常にビルドおよび実行されますが、Eclipseは、マウスを置いたときに"Unresolved inclusion: <stdio.h>"
と言う包含ステートメントの横にこの黄色の疑問符を表示し続けます。
プログラムの実行には影響しませんが、かなり面倒です。
誰もそれを削除する方法を知っていますか?
Eclipseが使用しているコンパイラーは、シンボルを問題なく解決できるため、コードは正常にコンパイルされます。
しかし、Eclipseが使用しているコード補完/プリプロセッサは、stdio.hがどこにあるかを知りません。
Stdio.hがあるファイルシステムパスを指定する必要があります。
参照: http://help.Eclipse.org/galileo/index.jsp?topic=/org.Eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm
これらの回答(受け入れられた回答を含む)はやや不可解でした。
私にとっては、stdio.hが配置されているパスを追加する必要がありました(@ardnewが言ったように)。 Eclipseで、プロジェクトのプロパティを開き、「C/C++ General」を展開して、「Paths and Symbols」を選択します。
使用している言語ごとにinclude
dirを追加したことを確認してください。 (私の場合、GNU C++に追加する必要がありました。)
知識ベースに追加するだけで、win7でcygwinを使用してこれを実行しました。
これは私のために働くようです。
cのパスを含めます。
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\usr\include
c ++のパスを含めます。
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
D:\dev\cygwin\usr\include
これにより、hello worldをきれいにコンパイルできます。
[プロジェクト]> [プロパティ]> [C/C++全般]> [プリプロセッサインクルード]> [プロバイダ]に移動し、両方を選択します。
それらのそれぞれについて、サブプロジェクト「プロジェクト間で共有されるグローバルプロバイダーを使用する」も選択します。
Ubuntu 16.04のEclipse 4.8.0で、CおよびC++のHello Worldを使用してテストしました。
問題を解決できます。 (英語が下手です)
私は複数のクロスコンパイラ構成で作業していますが、STDヘッダーファイル(および他の環境変数)に異なる場所を使用する必要があります。
解決策は、アクティブな構成を使用するようにインデクサーをセットアップすることでした。
残念ながらいくつかのEclipseのバグのため、オプションはローカルに保存されないため、 Eclipseを再度開いたときに構成を保存する場合は、workspace構成を使用します。
ウィンドウ->設定-> C/C++->インデクサー->アクティブなビルド構成を使用
これにより、EclipseはプロジェクトのアクティブなCross GCC構成で設定された適切なコンパイラーを使用します。
私はCygwinでEclipseを使用していますが、これは私のために働いた:
[プロジェクト]> [プロパティ]> [C/C++全般]> [プリプロセッサインクルード...]> [プロバイダー]に移動し、[CDT GCCビルトインコンパイラー設定Cygwin [共有]]を選択します。
私はEclipseベースのCodeWarrior IDEを組み込みプロジェクトに使用していますが、プロジェクトのプロパティ-> C/C++全般->パスとSybols->ディレクトリを含めるにソースアドレスを削除して再度追加することでこの問題を解決しました。これは、「未解決のインクルード:」メッセージを受け取る理由がたくさんあり、解決策もたくさんあることを意味します。
ADTでは、次のことを行いました。
通常、Eclipseは標準のインクルードファイルを自動的に解決できるはずです。これは、gccを呼び出して構成を要求することで実行されます。ほとんどの場合、Eclipseはgcc(または少なくともコンパイルに使用するバージョン)を検出していません。
プロジェクト設定ですべての標準インクルードパスを指定する代わりに、Eclipseがgccを検出することを確認したいでしょう。 Eclipseを起動する前に、gccが見つかったディレクトリをPATH環境変数に追加します。
異なるプロジェクトで異なるコンパイラを使用する場合は、検出オプションを微調整することができます。これらはデフォルトでは非表示になっているため、最初に[ウィンドウ]> [設定]> [C/C++]> [プロパティページの設定]> [検出オプション]ページの表示から有効にします。次に、プロジェクトプロパティの[C/C++ Build]> [Discovery Options]でそれらを見つけることができます。
一番上の回答のメモにあるように、ビルドフォルダーの場所を指定する必要があります。ビルドフォルダーは、プロジェクトを右クリックし、[プロパティ]-> [C/C++全般]-> [パスとシンボル]を選択して表示されるダイアログから追加できます。
残りの質問は、どのパスを追加する必要があるかです。
Gccがコマンドラインアクセス用に正しく設定されており、使用するデフォルトのインクルードパスが何であるかを知る必要がある場合は、質問してください。興味のある言語に応じて、以下を使用します。
gcc -x c -v -E /dev/null
gcc -x c++ -v -E /dev/null
...これは、gccを呼び出すときに使用されるデフォルトのコンパイラ設定をリストします(OSXのように、「gcc」が実際にclangのエイリアスである場合にもこのコマンドは機能します)。
/dev/null
は空のファイルを使用しています-空のファイルを解析するようにgccに指示しています
-x <language>
は、必要に応じてコンパイルする言語を指定します。これは、言語を指定する拡張子を持つファイルを使用していないためです。
-v
verbose出力。これには、インクルードパスの出力が含まれます
-E
は前処理のみを実行し、前処理されたファイルを出力します(これにより、gccが空のファイルが正しくコンパイルされないという苦情を防ぎます)
一番下には、インクルードディレクトリのリストがあります。
#include "..." search starts here:
#include <...> search starts here:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)
End of search list.
ここにリストされたディレクトリをリストされた順序でEclipseのパスとシンボルダイアログに入力すると、Eclipse CDTは標準ヘッダー、およびおそらくOSに固有の追加ヘッダーを見つけることができるはずです。
( devnull's answer に感謝します。関連する質問に。)