84

したがって、次のことを行うと:

#include <stdio.h>

#include "myFile.h"

コンパイラ (私の場合は GCC) は、その stdio.h (さらにはオブジェクト ファイル) がハード ドライブのどこにあるかを認識しています。私からの操作なしでファイルを利用するだけです。

私のUbuntu Linuxマシンでは、ファイルはに保存されていると思います/usr/include/コンパイラはこれらのファイルを探す場所をどのように知るのでしょうか? これは構成可能ですか、それとも単に予想されるデフォルトですか? この構成はどこで探せばよいでしょうか?

これらのインクルード ファイルについて質問しているので、ファイルのソースは何ですか? これは Linux コミュニティでは曖昧かもしれませんが、誰がこれらを管理しているのでしょうか? Windows コンパイラに同じファイルを提供し、管理するのは誰か。

私は常にコンパイラに付属しているという印象を受けていましたが、それは仮定でした...

4

4 に答える 4

55

こちらをご覧ください: 検索パス

概要:

#include <stdio.h>

インクルード ファイルが括弧で囲まれている場合、プリプロセッサは最初に-Iフラグで指定されたパスを検索します。次に、標準のインクルード パスを検索します (上記のリンクを参照し、-vフラグを使用してシステムでテストします)。

#include "myFile.h"

インクルード ファイルが引用符で囲まれている場合、プリプロセッサはまず現在のディレクトリを検索し、次に-iquoteで指定されたパス、次に-Iパス、次に標準パスを検索します。

-nostdincを使用して、プリプロセッサが標準パスをまったく検索しないようにすることができます。

環境変数を使用して検索パスを追加することもできます。

-vフラグを使用してコンパイルすると、使用された検索パスを確認できます。

于 2009-08-02T01:31:55.743 に答える
48

gcc は、機能を実行するために他の多くのプログラムを呼び出す、リッチで複雑な「オーケストレーション」プログラムです。システムのどこ#include "goo"を と#include <zap>が検索するかを確認するという特定の目的のために、次のことをお勧めします。

$ touch a.c
$ gcc -v -E a.c
 ...
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i686-apple-darwin9/4.0.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
# 1 "a.c"

これは、インクルードされたファイルの検索リストを表示する 1 つの方法です。これには、(存在する場合) 検索するが検索しないディレクトリが含まれ#include "..."ます#include <...>。私が示しているこの特定のリストは、実際には Mac OS X (別名 Darwin) のものですが、私が推奨するコマンドは、検索リスト (および...ここで置き換えた興味深い構成の詳細) を表示します。 gcc は正常に動作します。

于 2009-08-02T01:46:48.360 に答える
10

Karl はあなたの検索パスの質問に答えましたが、「ファイルのソース」に関する限り、注意すべきことの 1 つは、libfooパッケージをインストールし、それを使用して開発を行いたい場合 (つまり、そのヘッダーを使用する場合)、もインストールする必要がありますlibfoo-dev。ご覧のとおり、標準ライブラリのヘッダー ファイルは既に に/usr/includeあります。

多くのヘッダーを持つ一部のライブラリは、それらをサブディレクトリにインストールすることに注意してください/usr/include/openssl/usr/includeこれらのいずれかを含めるには、次のように、部分を除いてパスを指定します。

#include <openssl/aes.h>
于 2009-08-02T01:38:21.367 に答える
4

gccの\#includeファイルは に格納されてい/usr/includeます。g++ の標準インクルード ファイルは に格納されてい/usr/include/c++ます。

于 2014-10-03T12:50:46.057 に答える