2012年1月28日土曜日

自作のライブラリ

自分が作ったオリジナルの関数やクラスは一つのフォルダで管理して、どんなソースコードやプログラムからでも呼び出せるようにしておくと楽。
ここではMacでの共有ライブラリの設定方法を載せる。

まずライブラリを一括して管理しておくフォルダをホームフォルダ直下にある「library」として、そのフォルダへのパスの設定を行う。
以下を自分のホームフォルダにある「.bash_profile」というファイルに書きこむ。
export C_INCLUDE_PATH=~/library/:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=~/library/:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=~/library/:$LIBRARY_PATH
export DYLD_LIBRARY_PATH=~/library/:$DYLD_LIBRARY_PATH
 
最初の2行により、gccやg++が指定されたインクルードファイルをこのフォルダから探してきてくれる。
次の2行も同様にコンパイラがライブラリを探すフォルダを指定している。
「library」からさらに「include」と「lib」というフォルダを作ったりしてヘッダファイルとライブラリファイルを別で管理してもいいと思うけど、僕はめんどくさいので今んとこ同じフォルダにしている。

次に実際にgccやg++によってライブラリファイルを作る。
ここではmylib()という関数が含まれたmylib.cとヘッダファイルmylib.hをライブラリ化するものとする。
以下のようにコンパイルを行う。
$ gcc -shared mylib.c -o libmylib.so
成功すればlibmylib.soが出来上がる。
ここで、"lib"という頭文字は必ず付けなければいけないらしい。
これがライブラリファイルであり、これとヘッダファイルを先ほどの「library」フォルダに置いておく。
これだけでライブラリとして使える。

使用方法は、ソースコード内で以下のようにする。

#include <mylib.h>
...
int main()
{
   mylib();
}

mylib.hのインクルードは<>でくくればOK。
これをコンパイルするのは以下のようにする。
$ gcc main.c -o main -lmylib
-lのあとにライブラリ名を入れたオプションを付ける。
これで正常にコンパイルが通るはず。

以上が共有ライブラリのおおまかな設定方法である。
注意事項として、もしかしたら古いMac版のgccやg++だと-sharedというオプションに対応していない可能性がある。
その場合は-bundleを使うみないな情報をネットで見たけど確認は出来てない。

Makefileを使ってもっと便利にライブラリの管理ができる方法を今考えているので、そのうち載せたいと思う。

追記

.bash_profileの部分だけど、今確認したらこのやり方では上手くパスが通っていないようで、改善策を探し中。
昨日通ったのにおかしい。
作ったsoファイルを作業フォルダに移動して-L.のオプションを付けてコンパイルすると通る。


さらに追記

このままで問題なく通りました。

0 件のコメント :

コメントを投稿