• ベストアンサー

分割ファイルのコンパイル

$gcc Bprop.c init.c prop.c state.c head.h main.c memory.c read.c -lm -g 以上のように複数のファイルをコンパイルしたら以下のようなエラーが表示されました。 gcc: compilation of header file requested この場合は自分で作成しているヘッダファイルに問題があるのでしょうか?またヘッダファイル内では以下のヘッダを読み込んでいます。 stdio.h string.h stdlib.h math.h time.h ヒントをよろしくお願いします。

  • hotap
  • お礼率12% (4/32)

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

  • ベストアンサー
  • nopo3
  • ベストアンサー率40% (8/20)
回答No.2

仕事などの業務で使用するプログラミングでは、 ディレクトリ構造的に、ヘッダとCやPCのファイルは別ディレクトリに分ける事が一般的です。 それはC言語に限らずJavaやその他の言語に関してもそうです。 ヒントとしては、、、 コンパイル時には基本的にヘッダはファイル名を指定する事はないです。 ヘッダをディレクトリにまとめ、そのディレクトリを読み込ませます。 Cのファイル同士は、ファイル名を#includeしないですよね。だからコンパイル時にはファイル名を指定しないと連連づかないんです。 それに比べ、 ヘッダには#include<stdio.h>のように対象ファイル名を指定して関連付けしてある為、あとはどこにあるか指定すればいいってなわけです。

その他の回答 (2)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

すべての拡張子がcのファイル(init.c ・・・ read.c)の 先頭へ #include "head.h"を記述してください。 そして、$gcc Bprop.c init.c prop.c state.c main.c memory.c read.c -lm -g のように、head.hを除いて、コンパイルを行ってください。 そうすれば、あなたが望んだ結果が得られます。

回答No.1

ヘッダファイル head.h をコンパイルするのは変。 head.c なのか何かのCファイルで呼ぶべきでしょう。 素人なので自信なし。

hotap
質問者

お礼

自分でも気づいてびっくりでした。確かにヘッダファイルをコンパイルって…orzありがとうございました。

関連するQ&A

  • c言語のコンパイルについて教えてください。

    Unixとwindows98を使用しています。 #include<stdio.h> #include<math.h>    (以下 省略)  と、c言語のプログラムをして、コンパイルを、gcc ファイル名.c  と するのでしょうか。 cl ファイル名 -lm   とするのでしょうか。  どうすれば良いか、教えてください。 説明が下手で申し訳ございません。 お答えを待ってます。  

  • gccでの分割コンパイルについて

    参考書に分割コンパイルの方法が書いてなかったので質問させていただきます。 現在3つのソースファイルがあります。 1.header.h (関数プロトタイプ宣言) 2.kansu.c  (関数の定義) 3.main.c  (main()関数) ここで、main.cがheader.hをincludeしています。 このときの分割コンパイルはどのようにしたら良いのでしょうか?Makefileを作成するのでしょうか? 自分自身分割コンパイルの経験はありません。 環境は Cygwinを使ってのWindows XP コンパイラはgcc もうひとつは Visual Studio.netを使っての環境です。

  • コンパイル

    ubuntuで、 gcc (ファイル名).c とコンパイルをしようとすると、 error: stdio.h: No such file or directory error: math.h: No such file or directory が出てきてしまいます。どうやってコンパイルしたらよいのでしょう?初心者ですのでよろしくお願いします。

  • c++ファイルのコンパイル

    OSX(10.3)を使用しているのですが、ターミナルを使用してc++ファイルをコンパイルしようとすると以下のように表示されます。 ld: Undefined symbols: std::ios_base::Init::Init() std::ios_base::Init::~Init() ___gxx_personality_v0 c++ファイル自体は #include <iostream> int main(void) { return 0; } なので間違っていないと思うのですが (> <) コンパイルはgcc -o a.exe test.cpp で行いました。 どうすれば良いのでしょうか?分かる方お願いします。

    • ベストアンサー
    • Mac
  • 分割コンパイルでのファイル利用について

    分割コンパイルする際、例えばsub.cで fpi=fopen(argv[1], "rb") のようにファイルを開き、それを別のmain.cで 引き続き利用したい場合、どのようにして引き渡せば良いでしょうか? ヘッダファイルを利用してみたのですが、なぜか実行すると 「外部シンボル'_fpi'が未解決」などとエラーが出てしまいます。 ヘッダファイルについては、head.hに extern FILE *fpi,*fpo; と 入れておいて、main.cとsub.cに #include "head.h" を入力してある状態です。 使っているのは Microsoft Visual C++ Express Editionです。 よろしくお願いします。

  • 分割ファイルのコンパイルができない

    こんにちは。 mikroCというコンパイラを使い、 以下の2つのファイルをコンパイル 使用と思っていますが、 「init12f683が宣言されていない」、という エラーが出てしまいます。 プログラム的に問題あるでしょうか( コンパイラでは、ひとつのプロジェクト を作成し、両方そこに加えてあります)。 ----init12f683.c(自作関数) void init12f683(){ GPIO=0; CMCON0=0b00000111; ANSEL=0b01110000; TRISIO=0b00010000; } ----picc1.c(main) extern void init12f683(void);*宣言はここと、 void main(){ extern void init12f683(void);*ここで両方試しました。 init12f683(); Delay_ms(1000); while(1){ GPIO.F0=1 ; Delay_ms(1000) ; GPIO.F0=0 ; Delay_ms(1000) ; } } externでの関数の宣言は、mainの外に置く場合と、 中に入れる場合、両方試しています。 問題が、プロジェクトファイルの設定にあるのか、 プログラム的におかしいのか(どこがおかしいのか)、 知りたいです。 何か分かる人がいましたら、 よろしくお願いします。

  • Cygwinをいれました

    アルサイトからいれました、でもヘッダファイルがなくてgcc でコンパイルすると #include <stdio.h> #include <math.h> などで引っかかってコンパイルがとおりません。ヘッダファイルだけ欲しいのですが、どっからとってこれませんか?

  • 64ビットと32ビットの違い

    C言語を使っているのですが、32ビット版のgccでコンパイルして実行できるファイルが、64ビット版のgccだと違う結果が出てきます。どちらのgccでも使える汎用性のあるファイルは書けないのでしょうか? 因みにstdio.h、math.h、stdlib.hのライブラリを使っていて、倍精度(double)と整数(int)を使っています。配列は宣言時に「*a」とでも宣言して、mallocで作っています。 漠然とした質問ですがよろしくお願いします。

  • cygwin gcc c99 での isnormal と strtold の使用

    Cygwinのgccで-std=c99オプションを付けて 以下のコードをコンパイルしようとしています。 #include <stdlib.h> #include <math.h> int main() { isnormal(0.123); strtold("0.123", NULL); return 0 ; } $> gcc -std=c99 test_strtold.c ですが、コンパイルできず、2つの関数とも'undefined reference'になります。 -std=c99を付けてコンパイルする方法または この記述と同等の別の記述がありましたらご教授願います。 よろしくお願いいたします。

  • FFTWでコンパイルができません。

    FFTWでコンパイルができません。 http://www32.atwiki.jp/amaeda/pages/12.html ↑のソースファイルをコンパイルすると以下のエラーが出ます。↓ >gcc -o fftw1D fftw1D.c -lfftw3 -lm (MinGW) c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: cannot find -lfftw3 collect2: ld returned 1 exit status FFTWはわからないので、教えてください。

専門家に質問してみよう