Next: Linking libraries, Up: Using libtool
ソースファイルからオブジェクトファイルを作成するため,コンパイラは`-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.cとhello.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がその出力を破棄していることに注意してください. これは,コンパイラの警告がうるさく重複しないために行われます.