Linux には、pthreads を使用する共有ライブラリと、それを使用しない main.c があります。
libpthread.so は共有ライブラリの ldd に表示されますが、これは正しいです。
$ ldd libmapreduce.so.1.0
linux-gate.so.1 => (0x0067d000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0058c000)
[...]
しかし、pthreads を使用しない main.c をコンパイルして、使用する共有ライブラリにリンクすると、次のように表示されます。
$ icc -Wall -o main main.c -lmapreduce
/opt/intel/Compiler/11.1/046/lib/ia32/libiomp5.so: undefined reference to `pthread_atfork'
-lpthread をコンパイル コマンドに追加します。つまり、
$ icc -Wall -o main main.c -lmapreduce -lpthread
未定義の参照を解決します。
main.c で libpthread が使用されておらず、共有ライブラリにすでに libpthread がリンクされている場合、明示的に libpthread にリンクする必要があるのはなぜですか?