KPIT GCCでno include path

このQ&Aのポイント
  • H8のKPIT GNU Toolsを使ってmakeした際に「no include path in which to search for stdio.h」というエラーが出る理由がわからない
  • #include <stdio.h>によるエラーが発生するが、hello.cをコンパイルする際にはエラーが発生せず、デフォルトのインクルードパス設定で問題なくコンパイルできる
  • Makefileにはインクルードパスの設定は指定されていないため、エラーの原因は不明
回答を見る
  • ベストアンサー

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にはその設定は指定してませんので、デフォルト状態のはずです。 どうぞよろしくお願いします。

noname#230227
noname#230227

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

make は「拡張子」を見て「どういう処理をするか」を決めます. hello.c なら拡張子は「.c」なので「C のプログラム」と判断し (デフォルトでは) マクロ $(CC) に与えられたプログラムを使います. これに対し 8fp_io.C では拡張子が「.C」なので「C++ のプログラム」と解釈し $(CXX) で与えられるプログラムを起動します. Windows に慣れているとファイル名の大文字/小文字の区別に無頓着になりがちですが, このようにしっかり区別しなければならないこともあるので注意が必要です. ということで, ・Makefile で 8fp_io.C となっているところを 8fp_io.c に直す and/or 8fp_io.C というファイル名を 8fp_io.c に直す あるいは ・Makefile の CXX の設定を適当に変える (何が適当かは知りません. h8300-elf-g++ か?) ということをしてあげるといいかも.

noname#230227
質問者

お礼

拡張子を小文字のcに変更したところ、コンパイルできるようになりました。 大変助かりました、ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「H8のKPIT GNU Tools (v11.02, Windows版) を使ってmakeした」ときにどのような命令が実行されるのか, そして「試しに、("#include <stdio.h>"を用いる) hello.cを作って、h8300-elf-gccでコンパイルした」ときにどのようなコマンドを実行したのか, それぞれ書いてもらえますか?

noname#230227
質問者

補足

回答ありがとうございます。お手数おかけします。 まず、hello.cですが、 内容は、---ここから--- #include <stdio.h> int main(void) { int ret; ret = printf("Hello, World!\r\n"); return ret; } ---ここまで--- となります。 コンパイル: c:\nekocup\temp\gnuh8test>h8300-elf-gcc hello.c -o hello.out makeしたときは、 c:\nekocup\make_test>make g++ -c -o test1.o 8fp_io.C test1.C:4:20: error: no include path in which to search for stdio.h と、エラーが出ました。 、、、今気がついたのですが、コンパイルするときのプログラムが、h8300-elf-gccではなく、g++になっていました。 Makefileには、 CC = h8300-elf-gcc.exe ~省略~ .c.o: .S.o: $(CC) $(CFLAGS) $(INCLUDES) -c $< と書いてあるのですが、、 どうぞよろしくお願いします。

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

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

  • 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を使ってのリンク時のライブラリの指定法

    gccを使って、c++の勉強を始めようとしています。 hello.cpp(どこにでもある一行のプログラム)のコンパイルはできましたが、リンクができません。 私の機械では iostream は /usr/include/c++/3.3.2 にあります。( iostream.hは /usr/include/c++/3.3.2/backward にあります。) また、makefileにこの情報を書くには、どのように書けばよいのでしょうか。

  • 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に認識させる)には、どうすれば良いのでしょうか? どうか、宜しくお願い致します!

  • gccとPython.hのパス

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

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

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

  • 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はstdio.hをインクルードしなくてもprintfが実行できるのか

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

  • 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 対処方法を、ご教示願います。