【问题标题】:Where are the implementations of the C libraries? [duplicate]C 库的实现在哪里? [复制]
【发布时间】:2015-06-12 09:29:27
【问题描述】:

我想知道C 库是如何实现sqrt() 函数的。我在/usr/include 中得到了头文件math.h。但实际的实现在哪里?我正在做一个数值计算项目,想看看math.h中所有可用函数的实现。

【问题讨论】:

  • Googling gives no good results whatsoever-- 不知何故我不相信。原谅我。
  • 在 linux 上:man sqrt 告诉我链接-lm,意思是libm,是libmath 的缩写。大多数情况下,这些是 glibc (GNU libc) 的一部分,它是大多数 linux 发行版中的“标准”C 库。默认情况下,您的发行版不太可能提供安装在您计算机上的源代码,而是提供预编译的共享库。要获得资源,最好的方法是访问图书馆的网页。谷歌GNU C Library 你会找到的。
  • 虽然从您的问题可以推断出您在谈论 Linux,但最好适当地标记您的问题,这样就没有怀疑的余地了。

标签: c libraries libm


【解决方案1】:

您将在this SO thread 中为您的查询提供通用答案。

但是,具体到这个问题,要获得math相关的函数,你需要在glibc里面搜索libm源码。它位于名为 math 的目录中。

可在线浏览的版本是available here。

【讨论】:

  • GNU C 库做包含数学函数,如果需要,您只需要特别链接它们。
  • @Jite 是的,我更新了措辞。写完后我才意识到错误的意思。谢谢。
  • 源代码仍然只是在一个存储库中,所以你的措辞仍然有点混乱。您更有可能在数学文件夹中查找数学函数(尽管具体实现的位置可能并不明显)。
  • 英语也不是我的母语,但我认为在这种情况下,这与语言本身无关,而是您试图通过指责语言来掩饰缺乏知识。正如我在给作者的评论中所写的那样,man 页面通常是了解事物来源的良好开端。在这种情况下,它很可能在glibc 源代码中,可以通过谷歌搜索找到。我们现在也知道它是一个数学函数,并且源代码包含一个数学文件夹,所以它很可能在那里。在这种情况下,libm 只是一个由 glibc 的某些部分组合而成的库对象。
  • @Jite 我没有责怪语言,我知道不知道正确的措辞和一个非常糟糕的借口是我的错(你可能会发现)但它就是这样是。但是,我认为无论如何我们都不应该在这里讨论它。我已经用相同的链接更新了我的答案,如果您仔细查看并确认,这将很有帮助。谢谢你的时间。
猜你喜欢
  • 2015-06-02
  • 2021-04-29
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
相关资源
最近更新 更多