【发布时间】:2011-04-07 21:12:31
【问题描述】:
我使用dlopen 在我的程序中加载pthread 库,并使用dlsym 获取pthread_create 和pthread_join 的处理程序。
如何确保两个处理程序的版本兼容?我不在乎符号是新版本还是旧版本。我只希望我使用的任何pthread_create 都能与我得到的pthread_join 一起工作。
我知道有一个 dlvsym 可以向其传递明确的版本号,但我不关心确切的版本号,因为我希望我的代码独立于库版本。
【问题讨论】:
-
我相信您可以放心地假设 same 库提供的 pthread_create 和 pthread_join 将是兼容的。
-
问题是 dlsym 会返回兼容的符号。我没有在命令行链接库,而是使用 dlopen 和 dlsym 来获取处理程序。
-
迟到了,但是阅读以上内容,我想知道 - 我不明白使用
dlopen而不是将其留给传统的隐式动态链接,与Erik 的评论——如果您使用dlopen来获取您选择的库的句柄,请放心,_join和_create几乎可以保证相互协作,因为它们是同一个动态库的一部分从源代码构建的对象,它们被设计为相互协作? -
可能已经晚了,但您应该知道 libpthread 是一种特殊的野兽:如果您的程序最初是在没有 libpthread 的情况下编译/链接的,那么如果您尝试使用 libpthread 运行时(例如来自插件或使用 dlopen/dlsym)。
标签: c linker shared-libraries