次: , 上: Using libtool


3.1 オブジェクトファイルの作成

ソースファイルからオブジェクトファイルを作成するため,コンパイラは`-c' フラグ(とその他の必要なあらゆるフラグ)とともに呼び出されます.

     burger$ gcc -g -O -c main.c
     burger$

上記のコンパイラコマンドは,ソースファイルmain.cからオブジェク トファイルmain.oを生成します.

ほとんどのライブラリシステムでは,スタティックライブラリの一部となるオ ブジェクトファイルを作成することは,実行可能な形式にリンクされるオブジェ クトファイルを作成することと同じくらい単純です.

     burger$ gcc -g -O -c foo.c
     burger$ gcc -g -O -c hello.c
     burger$

しかし,共有ライブラリはposition-independent code (PIC)のみから ビルドされます.そのため,標準のposition-dependent codeではなくPICを生 成するようコンパイラに伝えるため,特定のフラグを渡す必要があります.

これがライブラリ実装の詳細なので,libtoolは個別の(`.o'の代わりに `.lo'で終わる)ライブラリオブジェクトファイルを用いて,複雑なPICコ ンパイラフラグを隠蔽します.共有ライブラリが無い(または,特定のPICフラ グが無い)システムでは,これらのライブラリオブジェクトファイルは“標準 の”オブジェクトファイルと同じです.

foo.chello.cに対するライブラリオブジェクトファイルを作 成するため,単純に標準のコンパイルコマンドを引数として,libtoolを呼び 出してください(see Compile mode).

     a23$ libtool --mode=compile gcc -g -O -c foo.c
     gcc -g -O -c foo.c
     echo timestamp > foo.lo
     a23$ libtool --mode=compile gcc -g -O -c hello.c
     gcc -g -O -c hello.c
     echo timestamp > hello.lo
     a23$

それぞれの呼び出しで,libtoolが二つのファイルを作成することに注意して ください.`.lo'ファイルはライブラリオブジェクトで,それは共有ライ ブラリにビルドされ,`.o'ファイルは標準的なオブジェクトファイルで す.`a23'では,スタティックライブラリのみサポートされているので, ライブラリオブジェクトはタイムスタンプのみです.

共有ライブラリのあるシステムでは,ライブラリオブジェクトと標準オブジェ クトが異なるように,libtoolはPIC生成フラグをコンパイルコマンドに自動的 に挿入します.

     burger$ libtool --mode=compile gcc -g -O -c foo.c
     gcc -g -O -c -fPIC -DPIC foo.c
     mv -f foo.o foo.lo
     gcc -g -O -c foo.c >/dev/null 2>&1
     burger$ libtool --mode=compile gcc -g -O -c hello.c
     gcc -g -O -c -fPIC -DPIC hello.c
     mv -f hello.o hello.lo
     gcc -g -O -c hello.c >/dev/null 2>&1
     burger$

二番目に実行されるGCCがその出力を破棄していることに注意してください. これは,コンパイラの警告がうるさく重複しないために行われます.