首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有linuxthread和nptl的特定定义

是否有linuxthread和nptl的特定定义
EN

Stack Overflow用户
提问于 2010-08-18 21:09:10
回答 1查看 1.4K关注 0票数 2

我有一个程序,它必须为linuxthread和nptl不同的工作。

在这个库中有没有定义,可以在我的程序中用来检测是否使用了nptl或linuxthread?

UPDATE1:对于运行时有一个getconf GLIBC_LIBPTHREADS,但是对于编译时呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-12 04:41:36

看起来这是不可能的,你可以在加载时改变实现,所以无论你做什么,在编译时都无法知道。

在pthread手册页中:

在具有同时支持LinuxThreads和NPTL的glibc (即glibc 2.3.x)的系统上,LD_ASSUME_KERNEL环境变量可用于覆盖动态链接器的默认线程实现选择。这个变量告诉动态链接器假设它运行在特定的内核版本之上。通过指定一个不提供NPTL所需支持的内核版本,我们可以强制使用LinuxThreads。(这样做的最可能的原因是运行一个(损坏的)应用程序,该应用程序依赖于LinuxThreads中的一些不符合规范的行为。)例如:

bash$ $( LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so |\ awk '{print $3}‘)| egrep -i’线程|ntpl‘linuxthreads 0.10 by Xavier Leroy

更不用说这两个实现(大部分)是二进制兼容的,所以基本上你不能在编译时知道将使用哪个线程库,因为它可能会根据程序运行时出现的环境变量而变化,或者有人可能会将二进制文件从NPTL系统复制到LinuxThreads系统。你就是不能这么做,因为它在编译时是未知的,至少不是你可以依赖的方式。

你必须找到一些方法来使用运行时检测,或者你可以更新你的帖子,告诉你为什么要这样做,也许有人可以提供一些建议,告诉你如何以其他方式实现它,或者如何使用运行时检测正在使用哪些pthread。

另一种可能的解决方案是向您的配置脚本添加一个选项,并让编译它的人员选择。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3512396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档