WindowsでいうDLL、Linuxでは(Dynamic)SharedObject(SO)とも呼ばれる。
ldd コマンド
lddコマンドは実行ファイルがどのダイナミックリンクライブラリを参照(リンク)しているか調べるコマンド。
以下の例ではtestというファイルはlib.so.4をリンクしていることがわかります。
libc.so.4 => /usr/lib/libc.so.4 (0×28067000)
ライブラリの作成
まず、SharedObjectとするプログラムを書く。sayhello.cとして保存します。
#include <stdio.h>
void sayhello(void)
{
printf("Hello\n");
}
gccを利用してSharedObjectとしてコンパイルします。
# fileコマンドでSOであることを確認
$ file libsayhello.so
libsayhello.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD), not stripped
ライブラリを呼び出すプログラム
sayhello()を呼び出すプログラムをmain_hello.cとして保存します。
#include <stdio.h>
int main(void)
{
sayhello();
return 0;
}
コンパイル
#lddで確認
$ ldd hello
hello:
libsayhello.so => not found (0×0)
libc.so.4 => /usr/lib/libc.so.4 (0×28067000)
この時点では、libsayhello.soがみつからないと言われる。
ライブラリの場所を環境変数LD_LIBRARY_PATH(ライブラリの検索パス)に加える必要がある。
# 実行
$ hello
Hello
※ /home/someone/mylibはlibsayhello.soのあるディレクトリを指定
参考文献
|
|
|
参考URL
- Secure Programming for Linux and Unix HOWTO
http://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/dlls.html - gccのstaticオプション
http://www.ok24.jp/tech/unixc_gccstatic.html - 共有ライブラリを利用するには
http://www.linux.or.jp/JF/JFdocs/Installing-Lesstif-6.html


