- ベストアンサー
gccとmakefileの基礎
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
makefileの作り方以前にgccの使い方とCの基本では? b.hはコンパイルなんてしません。 ライブラリもリンクしたいのであれば、-lライブラリ名でリンクします。 なので、 gcc -o test -lc a.c とかになりそうですね。ライブラリ名は適当ですが・・・ makefileの書き方は オライリーのが分かりやすく、使いやすいと思います。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
「だめ」とだけ言われて「何がどう『だめ』なのか」をどれくらいの人が認識できると思いますか? 以下おまけ: 通常名前の検索は「前から順」に行われるので, -lc はうしろにした方が安全です&gcc は「自分が知らない名前のファイルは無視して ld に渡す」仕様なのでライブラリは c.a で十分>#1. むしろ -lc だと「普通の C のライブラリ」をリンクしそうな勢い.
関連するQ&A
- C言語のmakefileについて
C言語のmakefileについて質問です。 例えば下記makefileでは、“CC”というマクロを“gcc”という文字列で再定義しています。 しかし中には(1)『CC = gcc』という定義なしでいきなり(2)『$(CC) -o hello $(objs)』 でコンパイルしているmakefileを見るのですが、その場合(2)は何でコンパイルされているのでしょうか。($(CC)の中身はCC??GCC?ACC??) ※下記ターゲット名等はサンプルです。 ------------------ # Makefile objs = hello.o edajima.o CC = gcc hello: $(objs) $(CC) -o hello $(objs) .PHONY: clean clean: $(RM) hello $(objs)
- 締切済み
- C・C++・C#
- GCCでライブラリが足りない
はじめまして。 LindowsOS4.0を使っています。 コンパイルができずに困っています。 GCCとMAKEをインストールしました(Lindowsはどちらも入っていないのです。Debian/Woodyベースと言われています)。 gcc 2.95.4 make 3.79.1 which gcc とすると、/usr/bin/gcc と表示されます。 で、./configure すると、 ..... checking whether the C compiler works ... no と表示されコンパイルエラーになります。 configure.log を見ると、 ------------------- checking for gcc configure:916: checking whether the C compiler (gcc ) works configure:932: gcc -o conftest conftest.c 1>&5 /usr/bin/ld: cannot open crt1.o: No such file or directory collect2: ld returned 1 exit status configure: failed program was: #line 927 "configure" #include "confdefs.h" main(){return(0);} --------------------- とか --------------------- checking for gcc configure:905: checking whether the C compiler (gcc ) works configure:921: gcc -o conftest conftest.c 1>&5 /usr/bin/ld: cannot open crt1.o: No such file or directory collect2: ld returned 1 exit status configure: failed program was: #line 916 "configure" #include "confdefs.h" main(){return(0);} ---------------------- とかなっています。 confdefs.hというのは何かのライブラリなのでしょうか?これが無いとconfigureできないのでしょうか?? よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- gdbデバッグのためのmakefile作成
現在Ubuntu Linuxでgccプログラミングを行っています。現在、ソースコードをいくつかのファイルに分割して作成しています。コンパイル時はmakefileを使用してmakeして実行ファイルを作成しています。 現在のプログラムをgdbでデバッグできるようにしたいと思っているのですが、 その場合のmakefileはどのようにして書けば良いのかをご教示頂きますよう、お願い致します。 現在のmakefile内容 https://sourceforge.jp/projects/cc1101driver/scm/svn/blobs/2319/trunk/20140411/Makefile #test #CC = gcc #test:main.c event.c exe: main.o event.o env.o audio.o task.o comm.o menu_show_status.o gcc -o exe main.o event.o env.o audio.o task.o comm.o menu_show_status.o -lpthread main.o:main.c gcc -c main.c event.o:event.c gcc -c event.c env.o:env.c gcc -c env.c audio.o:audio.c gcc -c audio.c task.o:task.c gcc -c task.c comm.o:comm.c gcc -c comm.c menu_show_status.o:menu_show_status.c gcc -c menu_show_status.c
- ベストアンサー
- C・C++・C#
- Makefileについて
同じディレクトリに、同名のa.plとa.cファイルが存在します。 それぞれは単独では問題なく動きます。 しかし、Makefileを使ってこれらのファイルを一緒に実行させたいのですが、make allrunでa.pl、a.cが実行された後に make: *** [allrun] エラー 14 と出てしまいます。 結果的には全て実行できた形になるのですが、エラーと出ているのでどうも不安です。 勉強中の身なので説明がうまくいっていないと思いますが、どうやればよいのか教えてください。 Makefileの中身は CC = gcc all:a a a:a.c $(CC) -o a a.c -lm allrun:a a ./a.pl ./a.out clean: -rm ./a -rm ./a です。
- ベストアンサー
- Perl
- 静的ライブラリについて教えて下さい
静的ライブラリについて教えて下さい。作成方法は大体わかったのですが、使い方と利用シーンがわかりません。例えば、 -main.c- #include <stdio.h> #include "abc.h" int main(){ a(); b(); c(); } -a.c- #include <stdio.h> void a(void){ printf("a\n"); } -b.c- #include <stdio.h> void b(void){ printf("b\n"); } -c.c- #include <stdio.h> void c(void){ printf("c\n"); } -abc.h- void a(void); void b(void); void c(void); というファイルを作成した上で以下のようにコンパイルしました。 gcc -c a.c gcc -c b.c gcc -c c.c これで、a.o, b.o, c.oというオブジェクトファイルが出来ました。 次にar rcs static a.o b.o c.oとコマンドを打ったところ、問題なくstaticという静的ライブラリと思われるファイルが出来ました。で、そもそもですがこの使い方がわかりません。main.cをコンパイルする際に使うのでしょうか?そもそも上で作成した静的ライブラリにはmain.oも含めるべきものでしょうか?初歩的な質問ですみません。宜しくお願いします。
- ベストアンサー
- Linux系OS
- Makefile作成時の拡張子.oとは?
main2.o: main.c gcc -o main2.o -c main.c hello2.o: hello.c gcc -o hello2.o -c hello.c test2: main2.o hello2.o gcc -o test2 main2.o hello2.o のようなMakefile作成時の拡張子.oとは何のファイルという意味なのでしょうか? Makefile作成初心者なのでご教授お願いいたします。
- ベストアンサー
- C・C++・C#
- Makefile と <math.h>
C言語初心者です,Vine Linuxを使用しています. Makefileを用いたコンパイルをしたいのですが,あるcコード中にある,「sqrt」でコンパイラからエラー警告が出ます. エラーコード: gcc -o p001 pMain001.o pIo001.o pFnc001.o pFnc001.o(.text+0x214): In function 'sqr_Rt': : undefined reference to 'sqrt' collect2: ld はステータス 1 で終了しました make: *** [p001] エラー 1 Makefile: #Makefile for p001 CC = gcc p001: pMain001.o pIo001.o pFnc001.c $(CC) -o p001 pMain001.o pIo001.o pFnc001.o pMain001.o: pMain001.c pIo001.c p001.h $(CC) -c pMain001.c pIo001.c pIo001.o: pIo001.c p001.h $(CC) -lm pIo001.o pIo001.c pFnc001.o: pFnc001.c p001.h $(CC) -c p001.o pFnc001.c プログラムの概要: p001.hには,構造体定義と関数プロトタイプ宣言. pIo001.cには,キーからの入力と,出力の関数. pFnc001.cにはp001.hにある定義を用いた関数があり,この中にsqrtを使う関数がある. pMain001.cではpIo001.cとpFnc001.cにある関数を利用し,入出力を行う. Makefileの記述が間違っているような気がしてならないんですが,何せ勉強不足なものでよくわかりません. <math.h>はp001.hでインクルードしていますが,これは違いますか? 長文を読んで下さってありがとうございます,「ココおかしい」などの指摘お待ちしています;;
- ベストアンサー
- C・C++・C#
- 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 : そのようなファイルやディレクトリ はありません と表示されコンパイルできません。恐らくライブラリが読み込まれていないまたはライブラリがインストールされていないために起こったと考えられるのですが、 どういった設定をすればいいのでしょうか?これまでは標準でインストールしただけで、全ての設定が完了していたのですが、今回は何故か設定ができていませんでしたので、手のつけられない状況です。 ご回答よろしくお願いします。
- ベストアンサー
- C・C++・C#
- makefileでアーカイブを作る方法
makefileでアーカイブを作る方法 以下のようなmakefileを書いて、アーカイブが出来ると思ったのですが、出来ませんでした。 *** makefile ****************************** #サフィックスルール .o.a: $(AR) $(ARFLAGS) $@ $< #コンパイルとアーカイブ作成 MyLib.a: MyString.o MyString.o: MyString.h ******************************************** 実行すると、MyString.oは作成されるのですが、MyLib.aは作成されず 「`MyLib.a' に対して行うべき事はありません.」 というメッセージが表示されます。 何が間違っているのでしょうか?
- ベストアンサー
- C・C++・C#
お礼
ご回答ありがとうございました! ヘッダファイルはコンパイルしないんですね・・ ありがとうございます!