• ベストアンサー

linuxの/usr/includeについて

(1)gccは、オプションを指定しないで、/usr/include以外のヘッダーファイルを見に行きますか? (2)/usr/includeの中はディストリビューションによって異なりますか? (3)/usr/includeはアプリケーションなどをインストールしたりして、増えたりするものなんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

gccと言ってもデフォルトは初期設定や環境によって異なるので、OSのプリインストールされている構成を前提に回答します。 > (1)gccは、オプションを指定しないで、/usr/include以外のヘッダーファイルを見に行きますか? どこを見に行くかは、gcc/cppdefault.c いうファイルで定義されています。 関係ありそうなのは、 LOCAL_INCLUDE_DIR: /usr/local/include PREFIX_INCLUDE_DIR: $(prefix)/include GCC_INCLUDE_DIR: $(libdir)/gcc/$(target_noncanonical)/$(version)/include TOOL_INCLUDE_DIR: $(prefix)/$(target_noncanonical)/include STANDARD_INCLUDE_DIR: /usr/include /usr/include以外ということですので、以下の3つが該当します。 /usr/local/include /usr/lib/gcc/$(target_noncanonical)/$(version)/include /usr/$(target_noncanonical)/include target_noncanonicalとは、「x86_64-redhat-linux」などのような文字列です。 versionは例えば4.1.2 であれば、「4.1.2」です。 > (2)/usr/includeの中はディストリビューションによって異なりますか? 異なります。ただし、普通は glibc が要なので、コア部分はほとんど違わないでしょうが。 > (3)/usr/includeはアプリケーションなどをインストールしたりして、増えたりするものなんでしょうか? rpm はdeb の開発用のパッケージ(rpm であれば「-devel」と付いているやつです)をインストールすれば増えます。

Vernal412
質問者

補足

わかりやすい説明ありがとうございます。 質問の内容は理解できました。 ありがとうございます。 1つ疑問なんですが、 > (2)/usr/includeの中はディストリビューションによって異なりま>すか? >異なります。ただし、普通は glibc が要なので、コア部分はほとん>ど違わないでしょうが。 とありますが、僕の知識不足で理解することができませんでした。 includeファイルとglibcとはどうゆう関係なんでしょうか? すいませんが知っていましたら、ご教授お願いします。

その他の回答 (1)

  • dev_null
  • ベストアンサー率67% (37/55)
回答No.1

> (1)gccは、オプションを指定しないで、/usr/include以外のヘッダーファイルを見に行きますか? とりあえずカレントディレクトリは参照するはずです。 ただし、#include "file" と #include <file> では、違うかも知れません > (2)/usr/includeの中はディストリビューションによって異なりますか? 異なる可能性が高いと思います。 ディストリビューションのバージョンによっても異なるかと > (3)/usr/includeはアプリケーションなどをインストールしたりして、増えたりするものなんでしょうか? フルパッケージのインストールを強要しないディストリビューションでは、追加されることもあるでしょう。

関連するQ&A

  • Linux C言語開発 インクルードについて

    C言語開発初心者です。 LinuxでC言語開発をするにあたり、どのディストリビューションにしても インクルードしたいヘッダファイルが既定の場所には無く別の場所にカーネルのバージョンごとに保存されているようなのです。 このままコンパイルを試みるとインクルードファイルが存在しませんとエラーが返ります。 既定のヘッダファイルの保存場所にはC言語開発に必要なヘッダファイルが存在しませんので、この問題を皆さんはどのように解決しておりますか?どなたかご教授お願いいたします。 C言語でincludeする場所は<>でくくった場合 /usr/include/ 以下を参照する設定になっていると思うのですが、 例えばmodule.h やinit.h などの開発用ヘッダファイル?を探してみると /usr/include/linux/ には存在せず、 find / -name module.h と入力して検索してみると /usr/src/kernels/2.6.32-131.21.1.el6.i686/include/linux/module.h と別な場所にあります。 ネットであれやこれや調べてみても コンパイル時にincludeの参照先を指定する方法はあるようなのですが、 コンパイルする度にいちいち指定するのは面倒だと思います。(gcc -I) かといって開発しているカレントディレクトリにヘッダファイルをコピーしても includeするヘッダファイルが別のヘッダファイルを参照することもあるようなので、 あまり現実的ではないようです。 一番安全な方法としてincludeする参照先が環境変数か何かで追加及び変更するのではないかと思います。 試してみましたがenvコマンドで表示されるOSの環境変数とは別のもののようなのです。 環境変数 C_INCLUDE_PATH とはどのようにして変更・追加するのでしょう? また、上記の方法以外で良い方法がございましたらそれでもかまいません。 よろしくお願いいたします。 開発環境 ・OS centos6 ・以下のパッケージはインストール済み kernel-headers-2.6.32-131.21.1.el6.i686 kernel-devel-2.6.32-131.21.1.el6.i686 make-3.81-19.el6.i686 gcc-4.4.5-6.el6.i686 ・GUI開発環境 netbeans ・uname -r 実行結果 2.6.32-131.21.1.el6.i686

  • fortran:includeできないとエラーがでます

    unix上にtelnetしてプログラムをつくっているのですが、fortranのプログラム中でinclude文を実行するとコンパイル時に Cannot open include file ’ヘッダーファイル名’ と出ます。 読み込むヘッダーファイルは市販のものをインストールしたものでこのファイルは/usr/includeにシンボリックリンクの形で存在しリンク先も存在します。ちなみにヘッダーファイル名を実在しないものにしても同じエラーメッセージが出ます。 なにが原因なのでしょうか。お心当たりのある方はよろしくお願いいたします。

  • LinuxでのGLibとGModuleを使った実行ファイルの作り方を教えてください。

    Linuxでプログラムの勉強をしています。 GLibとGModuleというライブラリ?を使ったプログラムを作らなければいけないのですが、gccでの実行ファイルの作り方(コマンドやMakefileの作り方)がどうしても分かりません。 今現在分かっているのが「/usr/include/glib-2.0」の中に「gmodule.h」と「glib.h」が、「/usr/lib」の中に「libgmodule-2.0.so」が、「/usr/lib/glib-2.0/include」の中に「glibconfig.h」というファイルが入っていて、場所の指定が必要らしいということです。 ソースファイルの中に「#include <glib.h>」と「#include <gmodule.h>」と言う記述はしているので、インクルードは出来ているのではないのかな?と個人的には思っています。 昨日から全く先に進まずかなり困ってるので、具体的なコマンドやその説明などのアドバイスがあればよろしくお願いします。

  • windowsでLinuxで作成したソースをコンパイル

    Linuxで作成、 $gcc -Wall file.c で、通ったファイルをWindowsでも同様に通したいので、MinGWを使って、コンパイルしたのですが、 #include <sys/socket.h> の構文で引っかかってしまいました。どうやらインクルードファイルが無いようでしたので、 C:\MinGW\include C:\MinGW\lib 以下に、Linuxの /usr/include/ /usr/lib/ 以下のファイルをそのまま入れて、再度実行しました。 ヘッダーファイルは見つけて読んでくれたのですが、そのヘッダーファイルに書いてある関数(例:htons(), socket(), inet_addr(), connect())が参照できないとの事で、怒られてしまいます。 Linuxのライブラリファイルをそのまま入れたのがまずかったのかもしれないのですが、こいつのエラーを解消する有効手段が見つかりません。 問題解決のヒント、又は答えを教えていただけませんでしょうか。 どうか、お願い致します。

  • なぜgccはstdio.hをインクルードしなくてもprintfが実行できるのか

    なぜgccはstdio.hをインクルードしなくてもprintfが実行できるのでしょうか。 暗黙にインクルードされるヘッダと されないヘッダファイルの差分等あれば教えていただきたく。。 // main.c int main(){ printf("SWSW\n") ; return 0 ; } % gcc main.c % ./a.out SWSW

  • gccに関する質問

    gccを実行するときの引数に関する質問です。 gccでコンパイルするときはヘッダーファイルのパスや、ライブラリ(拡張子が、.soのやつ)を指定しますがヘッダーファイルの方は、ソースファイルでもインクルードしているくらいだし、なんとか探してパスを指定すればよいのですが、ライブラリの場合はヘッダファイルと違ってインクルードする物ではないので、名前わからないし検討もつきません。 ヘッダファイルに該当するライブラリを探す方法はあるのでしょうか?

  • 不要なインクルードファイルの検出

    CentOS5.3環境で、gcc4.3.3を使用して開発をしています。 現在リファクタリングを行っているのですが、不要なコードを削除することによって、インクルードする必要がなくなったヘッダファイルの検出をしたいと思っています。 これを実現するための、コンパイラの機能やツールなどがあれば教えていただければと思います。

  • 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のオプションの意味を見てみましたがよくわかりませんでした。

  • OMCCコンパイラ #includeができない

    並列化を学んでいるのですが、 omccコンパイラでcプログラムをコンパイルすると、 "/usr/include/stdio.h", line ***: syntax error at symbol '__*' ↑の様なエラーが10行ほど出てしまいます。 gccコンパイラでコンパイルしてみると、普通に通るのですが…。 何かインストールし忘れているのでしょうか?

  • 自作したヘッダファイルをインクルードするには

    自作したヘッダファイルをインクルードするには 自作したヘッダファイルを半角スペースを含むフォルダを指定する時、 何かエスケープシーケンス文字が必要でしたでしょうか?ド忘れしてしまいました… 例えば、Program Filesの直下に入れた自作ヘッダファイルa.h(まず考えられないとは思いますが…)を インクルードしたい時、 #include "C:\\Program Files\\a.h" でいいんですよね?