• ベストアンサー
  • 暇なときにでも

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

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

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

  • 回答数2
  • 閲覧数7829
  • ありがとう数16

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

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

標準ライブラリのパスは、gccのインストール時に指定して、Cプリプロセッサの中に組み込まれます。 #include "example.h" は、まずカレントディレクトリを探し、次に gccコマンドラインの -I オプションで指定したディレクトリを探し、最後に標準ライブラリが探されます。 #include <example.h> は、カレントディレクトリを探さない点が異なります。 ccも基本的には同じですが、Unixの種類によって機能が異なる可能性があります。Linuxの場合はcc=gccです。

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

その他の回答 (1)

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

gcc がデフォルトで検索するヘッダファイルとライブラリの場所は、以下のコマンドで確認することが出来ます。 gcc -print-search-dirs 確認していないので分かりませんが、まあ、基本的には (gcc のインストール先)/include:/usr/include だと思います。 他のディレクトリにインストールされているヘッダファイルを検索するためには -I または -I- オプションを指定する必要があります。(-I- オプションを使っているところは見たことがありません) (ex.1) ヘッダファイルが /usr/local/include に存在する場合 gcc -I/usr/local/include ... (ex.2) ヘッダファイルが /usr/local/include と /opt/app/include に存在する場合 gcc -I/usr/local/include -I/opt/app/include ... > gccとccの違いも知りたいです。 Unix では gcc と cc は全く別物ですが、Linux では cc が gcc へのシンボリックリンクまたはハードリンクとして作成されていることがほとんどなので、基本的には同じと考えて問題ありません。

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

関連するQ&A

  • 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オプションで、毎回インクルードパスを設定する必要をなくす方法が知りたいです。) では、よろしくお願い致します。

  • LinuxのgccのLIBパス? (類似質問)

    Linuxのgccで、LIBのパスを設定する方法が知りたいのですが、gccについて詳しい書籍やサイトがありましたら、教えてください。 例)gcc -I/usr/local/example/include test.c /tmp/ccOFpCBo.o(.text+0x26): In function `main': : undefined reference to `EXAMPLE_1' /tmp/ccOFpCBo.o(.text+0x37): In function `main': : undefined reference to `EXAMPLE_2' /tmp/ccOFpCBo.o(.text+0x48): In function `main': : undefined reference to `EXAMPLE_3' collect2: ld はステータス1で終了しました。 また、ldとはVC6++でいう LINKのことでしょうか?

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

  • Linuxにgccをインストールしたのですが・・・

    Linux(Debian Sarge)にgccをインストールしたのですが、 #include <stdio.h> int main(void) { printf("Hello World"); return 0; } のような1.cといったファイル名のプログラムを作成し、 cc -o 1 1.c と実行したのですが、 1.c:1:19: stdio.h : そのようなファイルやディレクトリ はありません と表示されコンパイルできません。恐らくライブラリが読み込まれていないまたはライブラリがインストールされていないために起こったと考えられるのですが、 どういった設定をすればいいのでしょうか?これまでは標準でインストールしただけで、全ての設定が完了していたのですが、今回は何故か設定ができていませんでしたので、手のつけられない状況です。 ご回答よろしくお願いします。

  • gccとPython.hのパス

    cygwinでPythonの拡張モジュールを作成しようとgcc test.c とすると、Python.hがありませんと表示されます。 インクルードパスを通すにはどのようにしたら良いのでしょうか? //test.c #include <Python.h> ..

  • gccに関する質問

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

  • GCCの#includeパスの設定方法?

    RedHat Linux 8.0をインストールしています。adaptec社のAHA1542を使いたいのですが、自動認識してくれません。 色々調べた結果、/etc/modules.confに alias scsi_hostadapter aha1542.o を記述する事で、使用可能と言う事がわかりました。 しかし私のシステムでは、aha1542のソースとヘッダーファイルはありますが、オブジェクトがありません。 GCCにてコンパイルさせたら、大量のエラーメッセージが出力されます。ソースを見ると、 1) #include <linux/******.h> 2) #include <asm/*****.h> 3) #include "*****.h" と3種類の#include文があります。 3)は、ソースと同一ディレクトリーでOKだと思いますが、他の2種類のパスの設定方法がわかりません。 <linux/ <asm/ の部分を自分のシステムに合ったパスに置き換える(GCCに認識させる)には、どうすれば良いのでしょうか? どうか、宜しくお願い致します!

  • 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のライブラリファイルをそのまま入れたのがまずかったのかもしれないのですが、こいつのエラーを解消する有効手段が見つかりません。 問題解決のヒント、又は答えを教えていただけませんでしょうか。 どうか、お願い致します。

  • 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には何も追記したくないので何も追記していません。 どうすればライブラリのパスを通せますか?

  • インクルードパスを相対パスで指定

    Visual C++ 2017を使用したプロジェクト開発で、次のようなディレクトリ構造になっているとします。 root/  └ dev/    └ L1/      ├ L2/      │ ├ L3/      │ │ └ L4/      │ │   └ MyProj(開発用ディレクトリ)      │ └ foo/      │      └ include/ プロジェクトファイルやソースファイルは全てMyProjの直下にあります。 L2と同じ階層にあるincludeディレクトリにあるtest.hをソースファイルにインクルードするために、次のような#include文を記述します。 #include "../../../include/test.h" これで問題なくコンパイルが通ります。 次に、プロジェクトのプロパティの「追加のインクルードディレクトリ」に"../../foo"を追加します。 これは次のようなオプションと解釈されてコンパイラに渡されます。 /I"../../foo" fooというディレクトリのみを参照パスに追加するつもりで、プロジェクトファイルからの相対パスで指定しました。 さてここで#include文を次のように書き換えてみました。 #include "../../include/test.h" これでコンパイルが通るのです。 ソースファイルからtest.hへの相対パスは ../../../include/test.h のはずですが、なぜこれでコンパイルが通るのでしょうか? ちなみに「追加のインクルードディレクトリ」に何も指定しない状態では、includeファイルを開けないと出てコンパイルエラーとなります。 なのでこの設定が影響しているのだとは思いますが。