- ベストアンサー
分割ファイルのコンパイル
$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)
- C・C++・C#
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
仕事などの業務で使用するプログラミングでは、 ディレクトリ構造的に、ヘッダとCやPCのファイルは別ディレクトリに分ける事が一般的です。 それはC言語に限らずJavaやその他の言語に関してもそうです。 ヒントとしては、、、 コンパイル時には基本的にヘッダはファイル名を指定する事はないです。 ヘッダをディレクトリにまとめ、そのディレクトリを読み込ませます。 Cのファイル同士は、ファイル名を#includeしないですよね。だからコンパイル時にはファイル名を指定しないと連連づかないんです。 それに比べ、 ヘッダには#include<stdio.h>のように対象ファイル名を指定して関連付けしてある為、あとはどこにあるか指定すればいいってなわけです。
その他の回答 (2)
- tatsu99
- ベストアンサー率52% (391/751)
すべての拡張子が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を除いて、コンパイルを行ってください。 そうすれば、あなたが望んだ結果が得られます。
- endlessriver
- ベストアンサー率31% (218/696)
ヘッダファイル head.h をコンパイルするのは変。 head.c なのか何かのCファイルで呼ぶべきでしょう。 素人なので自信なし。
関連するQ&A
- c言語のコンパイルについて教えてください。
Unixとwindows98を使用しています。 #include<stdio.h> #include<math.h> (以下 省略) と、c言語のプログラムをして、コンパイルを、gcc ファイル名.c と するのでしょうか。 cl ファイル名 -lm とするのでしょうか。 どうすれば良いか、教えてください。 説明が下手で申し訳ございません。 お答えを待ってます。
- ベストアンサー
- C・C++・C#
- 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を使っての環境です。
- ベストアンサー
- C・C++・C#
- 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です。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 分割ファイルのコンパイルができない
こんにちは。 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の外に置く場合と、 中に入れる場合、両方試しています。 問題が、プロジェクトファイルの設定にあるのか、 プログラム的におかしいのか(どこがおかしいのか)、 知りたいです。 何か分かる人がいましたら、 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- Cygwinをいれました
アルサイトからいれました、でもヘッダファイルがなくてgcc でコンパイルすると #include <stdio.h> #include <math.h> などで引っかかってコンパイルがとおりません。ヘッダファイルだけ欲しいのですが、どっからとってこれませんか?
- 締切済み
- Linux系OS
- 64ビットと32ビットの違い
C言語を使っているのですが、32ビット版のgccでコンパイルして実行できるファイルが、64ビット版のgccだと違う結果が出てきます。どちらのgccでも使える汎用性のあるファイルは書けないのでしょうか? 因みにstdio.h、math.h、stdlib.hのライブラリを使っていて、倍精度(double)と整数(int)を使っています。配列は宣言時に「*a」とでも宣言して、mallocで作っています。 漠然とした質問ですがよろしくお願いします。
- ベストアンサー
- C・C++・C#
- 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を付けてコンパイルする方法または この記述と同等の別の記述がありましたらご教授願います。 よろしくお願いいたします。
- 締切済み
- C・C++・C#
- 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はわからないので、教えてください。
- ベストアンサー
- C・C++・C#
お礼
自分でも気づいてびっくりでした。確かにヘッダファイルをコンパイルって…orzありがとうございました。