11
我有一個問題:如果我們有一個應用程序,它不使用線程,我們可以通過兩種方式鏈接它:鏈接'-lpthread`會改變應用程序行爲嗎? (Linux操作系統,Glibc的)
1)鏈接像往常一樣,沒有-lpthread
和-ldl
2 )添加到鏈接兩個庫:libpthread和libdl。
E.g.
$ 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中,以什麼方式工作? pthreads的鏈接是否將線程不安全變爲線程安全算法?
E.g.
$ strace ./a 2>&1 |wc -l
73
$ strace ./a1 2>&1 |wc -l
103
在A1中跟蹤,兩個附加的庫加載,一些更mprotect
s的調用,並且加入的部分:
set_tid_address; set_robust_list; rt_sigaction x 2; rt_sigprocmask; getrlimit; uname
當pthread被鏈接時,哪些存根被改變? – osgx 2011-06-07 15:00:26
@osgx:http://www.ohloh.net/p/libpthread-stubs – 2011-06-08 00:16:09