共有ライブラリについて

共有ライブラリのコンパイル

  • コンパイルオプションに-fPIC(x64の場合)
  • リンクオプションに-shared
  • 出力ファイル名はlib(ライブラリ名).so

後は普通にコンパイル。

コンパイルが終わったら、作成したlib(ライブラリ名).soへのパスを通す。

一部のユーザーのみが実行するプログラムで利用する場合は、

  • setenv LD_LIBRARY_PATH=(lib(ライブラリ名).soのフルパス)

システム全体で利用する場合は、

  • /usr/local/libや/usr/libにシンボリックリンクを張る
  • /etc/ld.so.confを編集したのち、rootでldconfigを実行してキャッシュを更新

のいずれかを行う。

crontabで利用するプログラムから参照されるライブラリの場合は、rootから利用できないとならないので、/usr/local/libあたりにシンボリックリンクを張るのが手軽。

ln -i (lib(ライブラリ名).soのパス) /usr/local/lib

利用側ソフトウェア

普通に使う。すなわち、

  • コンパイルオプションに共有ライブラリのヘッダのパスを指定(-I)
  • リンクオプションに-l(ライブラリ名)

実行時に

Shared object "lib(ライブラリ名).so" not found, required by "ほげほげ"

の様に怒られたら、ライブラリへのpathが通っていないので再確認する。

実行ファイルやライブラリから参照されている他のライブラリを確認するには以下のコマンドを使用する。

% ldd ほげほげ