共有ライブラリを作る

http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/shared-libraries.html
http://www.hi-ho.ne.jp/babaq/linux/libtips.html

foo.c
#include <stdio.h>

void foo() {
  puts("foo()");
}
foo.h
void foo();
ビルド


~/work$ gcc -fPIC -g -c foo.c
~/work$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0.1 foo.o
~/work$ ls *foo*
foo.c foo.cpp foo.o foo.zip libfoo.so.1.0.1

foo.hとlibfoo.so.1.0.1をコピー


~/work$ cp libfoo.so.1.0.1 /usr/local/lib/
~/work$ cp foo.h /usr/local/include
~/work$ ls /usr/local/lib/*foo*
/usr/local/lib/libfoo.so.1 /usr/local/lib/libfoo.so.1.0.1

bar.c
#include <foo.h>

int main() {
  foo();
}
bar.cをビルド…失敗


~/work$ gcc bar.c -lfoo -o bar
/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status

シンボリックリンクを作ってldconfig


~/work$ cd /usr/local/lib/
/usr/local/lib$ ln -s libfoo.so.1.0.1 libfoo.so
/usr/local/lib$ ldconfig*1

bar.cをビルド、実行


vps10137:/usr/local/lib# vps10137:~# cd ~・work/
vps10137:~/work# gcc bar.c -lfoo -o bar
vps10137:~/work# ./bar
foo()

「/usr/local/include」はなんで参照されてるんだっけ?

*1:「ldconfig -n /usr/local/lib/」だとだめだった