В 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)
[...]
Но когда я компилирую и связываю свой main.c, который не использует pthreads, с моей разделяемой библиотекой, я вижу:
$ 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
разрешает неопределенную ссылку.
Почему мне нужно явно ссылаться на libpthread, если мой main.c не использует его, а в моей общей библиотеке уже есть libpthread?