GNU C言語開発環境


1.GNU Cコンパイラ2.GNU makeプロジェクト管理ツール3.関数ライブラリ4を作成して使用します.GNU C関数ライブラリ(glibc)
1.GNU Cコンパイラ
c言語で作成されたコードは、実行前にコンパイルとリンクを経て、最終的に実行可能なプログラムを生成する必要があります.(言語ソースコードのコンパイル、コンパイル、リンク、参照関数ライブラリのリンク)このプロセスには、いくつかのツール、いくつかの関数ライブラリが必要です.このツールをコンパイラと呼びます.
GNU Cコンパイラはgccと呼ばれ、gccにはプリプロセッサ、コンパイラ、アセンブリ、リンクなどが含まれています.構文の形式:
$ gcc [option] dest_file source_file

オプション
機能
Wall
警告メッセージの印刷
g
デバッグ情報を出力ファイルに追加
O o0 o1 o2
最適化オプション、複数が同時に表示された場合、最後のオプションが有効になります.
I
ヘッダファイルの検索パスを指定します.複数表示できます.
L
ライブラリファイルの検索パスを指定します.複数表示できます.
l
参照先ライブラリの指定
static
静的リンクの使用
shared
ダイナミックリンクの使用
E
前処理ファイルの出力
S
生成されたアセンブリファイルをコンパイル(.s)
c
生成されたターゲットファイルをコンパイル(.o)
o
出力されるファイル名を指定します(default:a.out)
hello worldのコンパイル例:
[view@file 00]$ gcc -S hello.c    //       
[view@file 00]$ ls
hello.c  hello.s
[view@file 00]$ gcc -c hello.c    //       
[view@file 00]$ ls
hello.c  hello.o
[view@file 00]$ gcc hello.o    //       
[view@file 00]$ ls
a.out  hello.c  hello.o
[view@file 00]$ ./a.out
hello world.
[view@file 00]$ gcc -Wall hello.c -o hello    //       ,         
[view@file 00]$ ls
hello  hello.c
[view@file 00]$ ./hello
hello world.

2.GNU makeプロジェクト管理ツール
プロジェクトでは、モジュール化開発をよく採用し、システムを複数のモジュールに分解し、各モジュールが特定の機能を完成する.このようにモジュールを分割すると、複数のソースファイルが表示されます.デバッグフェーズでは、リンクが繰り返しコンパイルされ、煩雑な繰り返し操作が発生する可能性があります.そこで、makeは、手動の煩雑な繰り返し操作の代わりに誕生した.makeは、ソースコードが変更されていないファイルのコンパイルを回避することもできます.
2.1.書式設定
makeツールでは、テキストファイルからコンパイルルールを読み込むことができます.各ルールの構文は次のとおりです.
  1    #              tab   
  2    #         

各ルールは、依存関係とコマンドの2つの部分で構成されています.すべてのコマンドの先頭にtabが必要で、コメントの内容を#の先頭で表します.
makeコマンドの構文:
$ make [option] [  ]    //        (      )
$ make -h    //      make  

ルール・ファイルMakefileの例:
hello:hello.o
        gcc -o hello hello.o
hello.o:hello.c
        gcc -c -o hello.o hello.c
clean:
        rm -f *.o

2.2.変数#ヘンスウ#
変数の定義と参照は、Shellと同じです.
CC      =       gcc
INSTALL =       install
CFLAGS  =       -O2 -Wall -W -Wshadow
OBJS    =       main.o prelogin.o postlogin.o privsock.o \
                tunables.o secbuf.o ls.o

.c.o:
        $(CC) -c $*.c $(CFLAGS) $(IFLAGS)

install:
        if [ -x /usr/local/sbin ]; then \
                $(INSTALL) -m 755 fint /usr/local/sbin/fint; \
        else \
                $(INSTALL) -m 755 fint /usr/sbin/fint;
        fi

GNU makeはいくつかの変数を事前に定義しており、Makefileファイルで直接使用したり、これらの変数を再定義したりすることができます.
定義済み変数
意味
デフォルト
RM
ファイルの削除
rm -r
$^
すべての依存ファイルがルールに表示されます.
$<
最初の依存ファイルの名前
$?
ルールにすべての依存ファイルが表示されます(変更日はターゲットの作成時間より新しいです)
$*
ターゲットファイル名(拡張子を省略)
$@
ターゲットファイル名
2.3.ワイルドカード
ルールでワイルドカードを使用できるようにします.「*」、「%」、「?」の3つのワイルドカードをサポートします.“[]”.例は2.4節を参照
2.4.ルール#ルール#
一般的なルール
規則はしばしば簡略化され、それぞれ暗黙規則、接尾辞規則、モード規則と呼ばれる.  1.暗黙ルールcプログラムでは、.c生成oファイルの場合、コマンドが与えられていない場合はmakeによって自動的に追加されます.
hello:hello.o
hello.o:hello.c
ターゲットファイルを生成する場合、依存ヘッダファイル
fint.o:find.h tom.h
ターゲットファイルは擬似ターゲットであり、「make clean」、「make install」コマンド実行時に擬似ターゲットがアクティブになります.
clean:
        rm -f *.o
install:
        install -oview -gview -m700 -T *.out dest/bin/hello
        install -oview -gview -m700 -t dest/lib lib*.so lib*.a
  2.接尾辞規則は、ある接尾辞を持つファイルを別の接尾辞を持つファイルに変換する方法を定義します.
# .c       .o   
.c.o:
        gcc -c $<
  3.パターン・ルールは、同じ動作特性を持つルールのクラスを定義し、%は共通を表します.
%.o:%.c
        $(CC) -c $


%.o:%c
        $(CC) -c $

2.5. パス
されるファイルが い 、ディレクトリ は です.ファイルの を く がある は、パスを する があります.makeの は、ディレクトリ を する がなく、 のためのパスを することです.VCATH を し、 のディレクトリにファイルが つからない は、その のパス を します.
VPATH           := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))

export srctree objtree VPATH

2.6.コマンドの
に を します.
[view@file ~]$ sed -n -e '115p' -e '131,132p' -e '176,177p' Makefile    #       
begin:
    @echo -e "Begin Pretreatment...
"    #  、     @sleep 1     @echo -e "Begin Compile...
"    #  、     @sleep 1 [view@file ~]$ make begin    #  Begin Pretreatment... Begin Compile... Begin Link... [view@file ~]$

2.7.ほぞんわりあて
Makefileファイル
vpath = include

vpath := include

の な り てを
vpath ?= include

に された のみが り てられます
vpath += include

の を
3. ライブラリの と
ライブラリは、 ライブラリと ライブラリの2つのタイプに けられます. ライブラリは、いくつかのターゲットファイル(.o)から され、 ライブラリはlibxxx.aと され、 ライブラリはlibxxx.soと されることが い.コンパイラは、リンクフェーズで ライブラリを ファイルに め み、 ライブラリの「ショートカット」を ファイルに します.
3.1. ライブラリ
ライブラリにはarツールが されています.Arコマンド は のとおりです.
$ ar [option] [tarfile] filelist

オプション

-d
ライブラリからオブジェクトを
-r
ライブラリにオブジェクトを ( する は )
-t
ライブラリ のオブジェクトのリストを
-x
ライブラリからオブジェクトを
-c
ライブラリの
2つのcソースプログラムを き、それぞれ1つの として ライブラリを します.
[view@file lib]$ gcc -c -Wall *.c
[view@file lib]$ ar -cr libmy.a *.o
[view@file lib]$ ar -t libmy.a
add.o
count.o

ライブラリを する は、 ライブラリの インタフェースを します.
extern int add(int x, int y)
extern int count(int * p);

したライブラリlibmyを び すメインプログラムを きます.a .
#   libmy.a,   my
[view@file lib]$ gcc -Wall main.c -L. -lmy

3.2.ダイナミックライブラリ
ライブラリ(ダイナミックライブラリ)を し、gccコマンドを して します. ライブラリを して、メインプログラムをコンパイルします.
[view@file lib]$ gcc -c add.c -fPIC    //             -fPIC
[view@file lib]$ gcc -c count.c -fPIC    //      ,       
[view@file lib]$ gcc -shared add.o count.o -o libmy.so    //      
[view@file lib]$ gcc -Wall main.c -L/home/view/cpro -lmy -o main

4.GNU C ライブラリ(glibc)
Linuxシステムにおけるglibc ライブラリファイルディレクトリ
   
/usr/include         //      
/usr/local/include   //      
   
/lib            //        
/usr/lib        //          
/usr/X11R6/lib  // X11R6     
/usr/local/lib  //      

ライブラリを します.ライブラリファイルを のパスに するだけでなく、パスをカスタマイズすることもできます.
vi /etc/ld.so.conf.d/xxx.conf
ldconfig