C言語ライブラリ
当社が供給するC言語のCGIで使用するライブラリについて記述します。
大部分のライブラリは、ライブラリ関数以外の環境は必要としませんが、一部のライブラリ
では、LinuxのAPIや、他のプロセスを利用して機能を実現するものも有ります。
ライブラリは、アーカイブで供給するものと、共有モジュール(.so)で供給するものが有ります。
また、ライブラリを使用するプログラムには、ライブラリの供給するヘッダファイルのインクルード
が必要です。また、このライブラリは、同時にソースファイルも供給します。
ライブラリのダウンロードは、ここから(UTF-8版)行って下さい。
Unix/Linux では、共有ライブラリ(ダイナミクリンクライブラリ)は、ライブラリを
使用するプログラムが、ダイナミックリンクライブラリのファイル名を指定して、ロードし、
ライブラリ関数のポインタを明示的に取り出して、目的の関数を呼び出さなければなりません。
関数 func1() が、ライブラリxyz.so に含まれている時の簡単なイメージは、以下の通りです。
char* p;
char* q;
p = dlopen( "xyz.so" , RTLY_LAZY ); //ライブラリのロードとリンク
q = dlsym( p , "func1" ); //関数ポインタの取り出し
ret = (*q)( a , b , c ); //関数の呼出
関数がダイナミックリンクライブラリで無ければ、呼出は、以下の様です。
ret = func1( a , b , c );
この為、各関数のダイナミックリンクライブラリを呼び出す為の関数(ラッパー関数)を
用意し、呼出側は、このラッパー関数を呼び出す様にしておきます。
すると、呼出側では、関数の本体が、ダイナミックリンクライブラリか、スタティックライブラリか
を意識せずに、同じ呼出シーケンスを使う事ができます。
ライブラリの呼出は、[B]の様に行いますが、func1()は、以下の様になっています。
当社の供給するライブラリは、
libcgi.so.? ライブラリの本体
soif.a ラッパー関数のライブラリ
の様に構成されており、CGIの本体は、soif.a とリンクします。
ライブラリのインストール方法は、ライブラリに含まれる INSTALL.ja 又は、INSTALL
というドキュメントをご覧下さい。
[A] ダイナミックリンクライブラリの呼出
[B] スタテックライブラリの呼出
func1( a , b , c ) {
p = dlopen( "xyz.so" , RTLY_LAZY ); //ライブラリのロードとリンク
q = dlsym( p , "func1" ); //関数ポインタの取り出し
ret = (*q)( a , b , c ); //関数の呼出
}
ライブライに含まれる関数の一覧、関数仕様は、ここから参照して下さい。