मैं एक सवाल है: यदि हम एक आवेदन, जो कोई सूत्र का उपयोग करता है, हम इसे दो तरह से लिंक कर सकते हैं:क्या '-lpthread` को जोड़ने से अनुप्रयोग व्यवहार में परिवर्तन होता है? (लिनक्स, Glibc)
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
डिफ़ॉल्ट रूप से, दोनों libs गतिशील रूप से जुड़े हुए हैं:
$ 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 के अंदर अलग-अलग तरीके से क्या काम करेगा? क्या पर्थ्रेड को जोड़ने से थ्रेड-असुरक्षित थ्रेड-सुरक्षित एल्गोरिदम से कुछ बदल जाएगा?
उदा।
$ strace ./a 2>&1 |wc -l
73
$ strace ./a1 2>&1 |wc -l
103
a1 का पता लगाने में, दो अतिरिक्त libs लोड किए गए हैं, कुछ और mprotect
रों कहा जाता है और की धारा कहा:
set_tid_address; set_robust_list; rt_sigaction x 2; rt_sigprocmask; getrlimit; uname
जब pthread में लिंक किया जाता है तो कौन से स्टब्स बदल जाते हैं? – osgx
@osgx: http://www.ohloh.net/p/libpthread-stubs –