是pthread在glibc.so由弱符号实现来提供pthread存根的功能呢?
我知道有pthread.so提供类似的功能pthread在glibc.so有人说pthread在glibc只提供存根,将被明确时更换连接到lpthread.
所以我的问题是如何支持它?使用弱符号或其他技术?
是libssl类似pthread的glibc?
是的,glibc使用各种pthread函数的存根实现,因此单线程程序不必浪费周期来执行诸如锁定和解锁互斥锁之类的操作,而不必链接到不同的C库(就像在例如微软世界).
例如,根据POSIX,每次调用时fputc(ch, stream),都会有互斥锁和解锁.如果您不想要,请致电fputc_unlocked.但是当你这样做时,你正在使用与线程相关的POSIX扩展; 对于不使用POSIX或不使用线程API的程序,它不是一个合适的解决方法.
使用实数(在动态glibc中)覆盖存根pthread函数不是基于弱符号.共享库机制可以覆盖非弱定义.
弱符号是一种允许在静态链接下进行符号覆盖的机制.
如果你想要一个上述语句的来源,这里是:
"请注意,DSO中的定义很弱,没有效果.弱定义只在静态链接中起作用." [Ulrich Drepper,"如何编写共享库" ].
如果你运行系统nm上的静态glibc(如果有的话)libc.a,你会注意到像这样的函数pthread_mutex_lock被标记为弱.在动态版本中,libc.so.<whatetever>函数未标记为弱.
注意:您应该使用nm -D或nm --dynamic查看共享库中的符号.nm不会在被剥离的共享库上生成任何内容.如果是,则查看调试符号,而不是动态符号.