• 締切済み
  • 暇なときにでも

gccのインクルードパスの確認

#include <stdio.h> は デフォルトのインクルードパス(/usr/include/)からstdio.hファイルを 探しますよね? http://oshiete1.goo.ne.jp/kotaeru.php3?q=2006018 ここに書いてあるように gcc -print-search-dirs を実行してみたのですが、/usr/include の記述は 含まれていませんでした。 http://www.sra.co.jp/wingnut/gcc/gcc-j.html で-print-search-dirsのオプションの意味を見てみましたがよくわかりませんでした。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数16644
  • ありがとう数10

みんなの回答

  • 回答No.3

「-v」オプションを使用すれば、gccがどのような動作をしているか全て表示されます。例えは、以下のようにします。 ============================================================ # cat sample.c ←gccを動作させるためには、プログラムが必要(ここではgccのオプションを見たいだけなので、簡単なプログラムでよい。) #include <stdio.h> main() { printf( "Hello, World!!\n" ); } # gcc -v -I./hogehoge sample.c Using built-in specs. Target: i386-redhat-linux コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux スレッドモデル: posix gcc バージョン 4.1.1 20070105 (Red Hat 4.1.1-52) /usr/libexec/gcc/i386-redhat-linux/4.1.1/cc1 -quiet -v -I./hogehoge sample.c -quiet -dumpbase sample.c -mtune=generic -auxbase sample -version -o /tmp/ccjKdz74.s 存在しないディレクトリ "/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../../i386-redhat-linux/include" を無視します #include "..." の探索はここから始まります: #include <...> の探索はここから始まります: ./hogehoge ←コンパイルオプションで「-I./hogehoge」を指定したので、そのディレクトリを探している。 /usr/local/include /usr/lib/gcc/i386-redhat-linux/4.1.1/include /usr/include ←「-I」オプションを指定しなくても、デフォルトで探しにいっている。 探索リストの終わり GNU C version 4.1.1 20070105 (Red Hat 4.1.1-52) (i386-redhat-linux) compiled by GNU C version 4.1.1 20070105 (Red Hat 4.1.1-52).  [以下、省略] # ============================================================ gccがどのようなデフォルト設定で動作しているか、確認してみて下さい。表示されない各種オプションが指定されていることもわかるはずです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 なるほどー。こんな風にして調べられるのですね。 さっそくやってみます。

  • 回答No.2
  • ogohs
  • ベストアンサー率33% (5/15)

gccで使用されるインクルード場所は、 環境変数INCLUDEに設定されます。 特別設定されていなくても、OSの設定として/usr/include等は 入っています。 特別に追加したい場合は、環境変数INCLUDEに追加するか、 gccのオプションに-I で追加してみてください。

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • notnot
  • ベストアンサー率47% (4712/9921)

-print-search-dirs は、gcc コマンドがコンパイラ等の本体を探すパスなので、#includeのヘッダファイルの検索場所とは無関係です。 /usr/includeを表示するオプションはわかりません。/usr/include 固定だから表示オプションは無いのでは?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • Linuxのgccのインクルードパス?

    Linuxのgccで、インクルードファイルやライブラリのパスを設定する方法が知りたいのですが、gccについて詳しい書籍やサイトがありましたら、教えてください。 gccとccの違いも知りたいです。 例) #include "example.h" このままだと、example.hが無いと表示されます。

  • Emacsでのgccのインクルードパスの設定方法

    こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 gccのインクルードパスの問題により、Emcasのcompileコマンドで、Cのソースファイルをコンパイルするができなくて困っています。 具体的には、CのソースファイルをEmacsで開き、「M-x compile」と入力した後、ミニバッファで「gcc -c test.c」と入力すると、以下のようなコンパイルエラーが表示されます。 ------------------------------------------------------------ gcc -c test.c test.c:1:19: no include path in which to search for stdio.h Compilation exited abnormally with code 1 at Sun Jul 08 18:24:05 ------------------------------------------------------------ どうやら、インクルードパスが設定されていないようです。 ちなみに、test.cは以下のような非常に単純なCプログラムです。 ------------------------------------------------------------ include <stdio.h> int main(void) { printf("Hello!\n"); return 0; } ------------------------------------------------------------ コマンドプロンプトや、ktermといった端末から、同じように gcc -c test.c というコマンドを実行すると、エラーが出る事はなく上手くコンパイルできますので、 適切なインクルードパスが設定されているはずです。 どうすれば、Emacsのcompileコマンドから、gccでコンパイルを行う時に使われる、インクルードパスを設定する事ができるのでしょうか? (gccの-Iオプションで、毎回インクルードパスを設定する必要をなくす方法が知りたいです。) では、よろしくお願い致します。

  • KPIT GCCでno include path

    H8のKPIT GNU Tools (v11.02, Windows版) を使ってmakeしたところ、 "no include path in which to search for stdio.h" とエラーが出ます。 エラーの出た行の内容は、 #include <stdio.h> であり、これでエラーが出る理由がわかりません。 試しに、("#include <stdio.h>"を用いる) hello.cを作って、h8300-elf-gccでコンパイルしたところ、特にエラーもなくコンパイルできました。 インクルードパスがおかしいのかとも思いますが、Makefileにはその設定は指定してませんので、デフォルト状態のはずです。 どうぞよろしくお願いします。

  • bccは分かりましたがgccが使えません

    Cのソースの#include <stdio.h>でエラーになります。 gccではbccのbcc32.cfgで行うような設定はどのようにすればよいですか? MINGWのコンソールで $ echo $C_INCLUDE_PATH c:/msys/1.0/mingw/include;c:/msys/1.0/mingw/lib/gcc/mingw32/3.4.5/include このように出ます。 $ gcc myapp.c で#include <stdio.h>の行でコンパイルエラーです。 MINGWでは$C_INCLUDE_PATHを正しく設定できているみたいですが、gcc.exeにそれが伝わっていないみたいです。 AUTOEXEC.BATには何も追記したくないので何も追記していません。 どうすればライブラリのパスを通せますか?

  • gcc@MinGW:外部コマンドの起動

    MSYS2/MinGW64 on Windows10 の環境で gcc 開発をしています。 下記の簡単なソースを用意します。 #include <stdio.h> #include <stdlib.h> void main() { system("/usr/bin/ls"); exit(0); } なお、/usr/bin/ls の存在は、   $ which ls ↓   /usr/bin/ls にて確認しています。 これを /mingw64/bin/gcc でコンパイルして実行すると、 '/usr/bin/ls' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と表示され、明らかに存在するはずの ls コマンドが起動されません(上記エラーメッセージ中のマルチバイト文字はなぜか cp932 で表示されています)。 ところが、同じソースを /usr/bin/gcc でコンパイルすると、問題なく実行されるのです。 MSYS2 と MinGW の関係がよく理解できていないこともあり、どうしてこのようなことが起こるのか理解に苦しんでいます。 どなたかお心当りのあるかた、お教え下されば幸いです。

  • gcc -print-file-nameオプション

    Linuxの初心者です。 VMwareで動作するFedoraCoreで組込ソフトを開発しようとしています。 arm-linux-gcc -print-file-name=crt1.o を実行すると crt1.o とファイル名だけ表示されます。 書籍等では /usr/lib/crt1.o と絶対パスで表示されると書かれているのですが -print-file-name でパスが表示されないのは何か設定不足があるのでしょうか? こちらで行ったのはprofile.dにarm-linux-gccのbinとusr/binにパスを設定するファイルをおいただけです。 超初歩的なミスなのかもしれませんが、知恵を貸して頂けると幸いです。

  • cygwinのgccが、エラーになってしまいます。

    テストプログラム $ cat test.c #include <stdio.h> int main (void) { printf("Hello, World!\n"); return 0; } これを、コンパイルすると $ gcc test.c gcc: error trying to exec '/usr/lib/gcc/i686-pc-cygwin/4.5.3/cc1.exe': execv: Bad address /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o):(.text+0xba): undefined reference to `_WinMain@16' collect2: ld はステータス 1 で終了しました と、このようなエラーが出てきました。 ファイルを確認しても、何も作られていません。 $ ls test.c 対処方法を、ご教示願います。

  • ヘッダファイルのインクルードその2

    http://www.okweb.ne.jp/kotaeru.php3?q=541009 に関連した状況です。 ヘッダ同士がお互いにincludeしているとエラーになるそうですが、 異なる2つのclassがあって、互いにメンバ関数を呼び合うような場合、 includeはどのように行えばよいのでしょうか? 普通は、main.cppや、より上位のアプリケーション管理クラスに 書くものなのでしょうか? 試しにそうしてみたのですが、エラーを見ると、 何やらお互いに「そんなクラスは知らない」と言い合っているようなのです。 似たような質問で申し訳ないです。

  • gcc使用時のエラー

    現在openCVで画像処理プログラミングを行おうとしております。 一通りコーディングが終わった所でgccを使用してコンパイルをかけた所、 下記のようなエラーが出ました。 (コード中でhighgui.h及びcv.hをインクルードしています。) /tmp/cch6hMvI.o: In function `cvDecRefData': test.c:(.text+0xaa6): undefined reference to `cvFree_' test.c:(.text+0xb2e): undefined reference to `cvFree_' これはライブラリへのパスが通っていないものと思い、端末から export LD_LIBRARY_PATH=/usr/local/lib/ としましたが、それでもエラーが出ます。さらに下記も試してみましたが同様です。 gcc -L/usr/local/lib -o test test.c (/usr/local/lib/以下にlibopencv_core.so.2.4等が置いてあります。) pkg-configを使用すればコンパイルは通るのですが、 何がどうなってエラーになっているのかイマイチ分からず気持ちが悪いです。 1、上記エラーは共有ライブラリへのパスが通っていないために起きているものですか? 2、そうだとすれば、-Lやexport LD_LIBRARY_PATHで解決出来ないのは何故でしょう? 上記だけで情報が不足している場合は提示致しますので、 どうぞよろしくお願い致します。

  • BUFSIZのデフォルト値

    AIX6.1 /usr/include/stdio.h 内で定義されている、BUFSIZ値のデフォルト値を教えて下さい。