【问题标题】:What functions is the libm intended for?libm 的用途是什么?
【发布时间】:2019-05-31 23:15:25
【问题描述】:

据我所知,一些数学函数包含在 libc 中,而另一些则包含在 libm 中。我通过实验发现了这一点:

$ nm --dynamic --defined-only /lib/x86_64-linux-gnu/libm.so.6 | grep -w abs 
$ nm --dynamic --defined-only /lib/x86_64-linux-gnu/libc.so.6 | grep -w abs 
T abs

是否有关于 libm 必须提供哪些数学函数的要求? libc 和 libm 是否一起提供了 C 标准所需的所有数学函数?

【问题讨论】:

  • libm 包含math.h 中声明的内容的定义。
  • "libc 和 libm 是否一起提供了 C++ 标准所需的所有数学函数?"不,只有C需要的。如果你需要了解一些具体的功能,我建议搜索this excellent reference site
  • @EtiennedeMartel math.h 包含函数 abs,而 libm 没有。
  • 不,显然 libc 和 libm 不提供所有 C++ 数学库。其中很多只是标题。
  • @MatthieuBrucher 刚才提到libm和libc必须只提供C函数

标签: c linux glibc libc libm


【解决方案1】:

ISO C 和 ISO C++ 等语言标准不关心链接等问题。

POSIX 仅要求c99 编译器支持-lm,并且如果指定了-lm,则在标题<math.h><complex.h><fenv.h> 中声明的函数可用于链接。如果函数定义在默认链接的库中,则可以满足此要求。

在当前的 glibc 中,函数的拆分大多是任意的,受当前实现的一些限制。 (很久以前,支持两个线程库,因此所有与线程相关的功能都必须进入libpthread,但现在不再如此。)其他方法是可能的:musl 将所有内容放入libc.a 以进行静态链接,并进入动态链接器进行动态链接。

【讨论】:

  • macOS 拥有 C 主库中的所有数学函数。
  • “glibc”是一组库的名称,其中一个是 libm?
  • glibc 是 GNU/Linux 系统上的 C 库的名称。它的实现被拆分为多个动态共享对象。在大多数架构上,它们被称为libc.so.6libm.so.6libpthread.so.0,还有更多。
猜你喜欢
  • 2012-06-03
  • 1970-01-01
  • 2010-09-27
  • 2011-12-17
  • 2010-11-21
  • 1970-01-01
  • 2021-07-19
  • 2016-11-14
相关资源
最近更新 更多