【发布时间】:2015-02-11 02:51:15
【问题描述】:
我有使用线程的共享库。假设这是主应用程序的插件。我无法更改此主应用程序,只能访问我的共享库。主应用程序可以与 ptreads 链接,也可以不与 pthreads 链接。因此,根据这一点,它将使用 libc-lock.h 的线程安全版本或非线程安全版本。
在 glibc 中
- 非线程安全版本在
bits/libc-lock.h:https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/libc-lock.h;h=7bd935caf4c60058b094dad2aa5d2402fd9df15f;hb=HEAD - 线程安全在
sysdeps/nptl/bits/libc-lock.h:https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/nptl/bits/libc-lock.h;h=d9a82ad962c461f0de8f532fed7013d429ef0f94;hb=HEAD
因此,如果主应用程序已经加载了 libc-lock.h 的非线程安全版本,应用程序只会因段错误而崩溃,因为我的库正在积极使用线程。
我想要做的是在运行时检查是否加载了 libc-lock.h 的版本,如果这不是线程安全版本,则退出并显示正确的消息。
那么,有没有办法在运行时找到这些信息?
【问题讨论】:
标签: c linux multithreading shared-libraries glibc