ohloh.net/p/libpthread-stubs
я вопрос: если у нас есть приложение, которое не использует потоки, мы можем связать его двумя способами:
1) Ссылка как обычно, без-lpthread
а также-ldl
2) Добавьте к ссылке две библиотеки: libpthread и libdl.
Например.
$ cat a.c
int main(){printf("Hehe");}
$ gcc a.c -w -o a
$ gcc a.c -w -o a1 -ldl -lpthread
По умолчанию обе библиотеки динамически связаны:
$ ldd a
linux-gate.so.1
libc.so.6
/lib/ld-linux.so.2
$ ldd a1
linux-gate.so.1
libdl.so.2
libpthread.so.0
libc.so.6
/lib/ld-linux.so.2
Какая разница будет между версиейa
и версияa1
? Что будет работать по-другому внутри самого приложения и int glibc? Изменит ли связывание pthread-ов что-то из поточно-небезопасного в поточно-безопасный алгоритм?
Например.
$ strace ./a 2>&1 |wc -l
73
$ strace ./a1 2>&1 |wc -l
103
В трассировке a1 загружены две дополнительные библиотеки, еще несколькоmprotect
Вызываются и добавляются разделы:
set_tid_address; set_robust_list; rt_sigaction x 2; rt_sigprocmask; getrlimit; uname