为什么GCC要求链接到p线程函数,而不需要参数来链接到其他函数? [英] Why does GCC require "-lpthread" to link against pthread functions but doesn't require arguments to link against other functions?

查看:27
本文介绍了为什么GCC要求链接到p线程函数,而不需要参数来链接到其他函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我使用pTHREAD函数,则必须在GCC上使用&lpthread&qot;参数以确保正确链接。然而,为什么GCC在链接其他标准函数时不需要额外的参数?例如:printf、scanf、poix套接字等

推荐答案

在类Unix系统上,C库的某些部分历来是在单独的共享对象中实现的。编译器驱动程序(gcc)只与-lc(和动态加载器)隐式链接,而不是这些其他共享对象,例如-lm(数学库)、-ldl(动态链接器/dlopen),或者在您的例子中,-lpthread。这种分离没有技术原因:musl所有放入动态加载器(包括-lc)。

关于libpthread,有几个POSIX线程库可以使用,其中glibc、LinuxThread和FSU线程是最受欢迎的。这意味着程序员可以使用适当的-l(或者-I)选项选择不同的线程库。

集成的Native POSIX Threads Library (NPTL)在集成到glibc后很快就取代了它们,因此允许开发人员选择不再是一个问题。然而,在glibc内部,拆分成单独的对象仍然存在。在glibc版本2.34中,libpthread最终也被集成到glibc的主(隐式链接)对象中:

这篇关于为什么GCC要求链接到p线程函数,而不需要参数来链接到其他函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆