C/C++でのお話です。
忘れがちなのでまとめておきます。
備忘録
共有ライブラリ作成時
共有ライブラリ使用時
- 先頭のlibと拡張子.soを除いた名前を指定する(例:libsharedlib.soなら-l sharedlib)
- ヘッダファイルやライブラリパスの場所を指定する-Iや-Lはスペースを空けずにオプションの直後にパスを書く(例:-I/home/sample -L./lib)
共有ライブラリの作成
#include <stdio.h> int add( int n1, int n2 ) { printf( "result:%d + %d = %d\n", n1, n2, n1+n2 ); return n1+n2; }
gcc -shared -fPIC -o libsharedlib.so sharedlib.c
共有ライブラリの使用
#include <stdio.h> int main() { int n1 = 10; int n2 = 20; printf( "caller:%d + %d = %d\n", n1, n2, add(n1,n2) ); return 0; }
gcc -I./ -L./ -o main main.c -lsharedlib
正しく実行されれば以下が標準出力に出力されます。
result:10 + 20 = 30 caller:10 + 20 = 30
もし共有ファイル名の先頭が「lib」でない場合は以下のように
共有ライブラリが見つけられずリンカーエラーになってしまいます。
/usr/bin/ld: cannot find -lsharedlib
実行ファイル実行時
ライブラリのパスが通っている場所に共有ライブラリを置くか、
もしくは以下のように環境変数LD_LIBRARY_PATHにパスを指定してから実行します。
自注)この設定は、恒久的でなくシェルを閉じるとなくなる!
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
これを実施しないと以下のように共有ライブラリが
見つからない旨のエラーメッセージが出力されます。
./main: error while loading shared libraries: libsharedlib.so: cannot open shared object file: No such file or directory
0 件のコメント:
コメントを投稿