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

Ответы на вопрос(1)

Ваш ответ на вопрос