最近の gcc だとシンボル解決がうまくいかないといかないことがあったので、ちょっと調べました。 次のような 3つのソースファイルがあったとして、ダイナミックリンクで作ってみましょう。 `main.c` int foo(void); int main(void) { return foo() + 1; } `foo.c` int bar(void); int foo(void) { return bar() + 1; } `bar.c` int bar(void) { return 0; } shared object を作るのに必要なのは、コンパイル時に `-fPIC` オプションをつけることと、リンク時に `-shared` オプションをつけることの 2点です。 $ gcc -fPIC -c -o bar.o bar.c $ gcc -shared -o libbar.so bar.o