目次 †ライブラリ開発 †大規模なプログラム開発では、デバッグの容易さやコンパイル時間の短縮のために、
以下では、大規模なプログラム開発で常識的に行われている以上の3点について解説します。 分割コンパイル †一つのアプリケーションプログラムを開発するために複数のファイルでプログラムソースを管理し、
以下の.cファイルがあるとします。 main.c func.c 以上のファイルの中にはただ一つmain関数があるものとします。 まず、ぞれぞれを"-c"オプションをつけてコンパイルします。 $ gcc -c main.c $ gcc -c func.c $ ls main.o func.o "gcc -c"により.oファイルが生成されました。 最後に以下のように実行ファイルを生成します。 $ gcc -o test_func main.o func.o ただし、"-o"オプションは実行ファイルの名前を指定しています。 共有ライブラリ開発 †ライブラリを用意する事、はアプリケーションプログラムで頻繁に使用する関数等をあらかじめ開発して、
$ ls /usr/lib $ ls /usr/local/lib アプリケーションプログラム開発時には、そのライブラリの思想を十分汲み取る事で、
MacOS Xの場合、共有ライブラリのファイルは"lib"で始まり.dylibで終わる事になっており
func1.c func2.c 以上のファイルの中にはmain関数があってはいけません。 まず、ぞれぞれを"-c"オプションをつけてコンパイルします。 $ gcc -c func1.c $ gcc -c func2.c $ ls main.o func.o "gcc -c"により.oファイルが生成されました。 最後に以下のように共有ファイルを作成します。 $ gcc -dynamiclib -o libfunc.dylib func1.o func2.o $ ls func1.c func1.o func2.c func2.o libfunc.dylib ただし、"-o"オプションは共有ファイルの名前を指定している。
linuxの場合、共有ライブラリのファイルは"lib"で始まり.soで終わる事になっており、
func1.c func2.c 以上のファイルの中にはmain関数があってはいけません。 まず、ぞれぞれを"-c"オプションをつけてコンパイルします。 $ gcc -c func1.c $ gcc -c func2.c $ ls main.o func.o "gcc -c"により.oファイルが生成されました。 最後に以下のように共有ファイルを作成します。 $ gcc -shared -o libfunc.so func1.o func2.o $ ls func1.c func1.o func2.c func2.o libfunc.so ただし、"-o"オプションは共有ファイルの名前を指定しています。 共有ライブラリの使用方法 †共有ライブラリを使用するためにはコンパイラにオプションを渡す必要があります。 gcc -L../lib -lfunc -o test_func main.c -L: ライブラリの場所を指定するオプション -l: リンクするライブラリを指定するオプション。ライブラリのファイル名はlib??.so (linux等)、lib??.dylib (MacOS X)のようになっているが、??の部分のみ記述します。
本ライブラリでは"/usr/local/lib"等、通常システム用のディレクトリにインストールされるライブラリが
そのため以下のような記述をexec.shに自動的に書き込むようにスクリプトを作っていますので、
$cat exec.sh #!/bin/sh export DYLD_LIBRARY_PATH="../../lib" #MacOS X用の記述 export LD_LIBRARY_PATH=../../lib:$LD_LIBRARY_PATH $* # スクリプトの引数を全て展開 $ ./exec.sh ./shoothing_game |