我已经<string.h>在所有地方都包含了,当我去包含时,我<math.h>发现pow()我需要修改我的 makefile 才能访问pow.
如果我需要包含它们,我也不知道在哪里可以查找更多库。我随机读到该-lm标志(或至少是m它的标志)表示标准 c 数学库,但我不知道其他标准 c 库可能被称为什么。
我刚刚查看了一下,user/local/lib我看到的只是:
$ cd /usr/local/lib
$ ls -al
drwxr-xr-x 3 root root 4096 Apr 25 2012 .
drwxr-xr-x 10 root root 4096 Apr 25 2012 ..
drwxrwsr-x 4 root staff 4096 Oct 14 10:19 python2.7
Run Code Online (Sandbox Code Playgroud)
string.h是对标准库模块的标头引用,但由于历史原因math.h不是对标准库模块的标头引用。编译程序时,链接器中通常默认包含标准库。
在某个时间点,人们可能会libm.so math.h用其他针对内存、CPU 性能等进行了更好优化的实现来替代实现。实际上,不存在单一的libm.so“默认”实现。然而,大多数系统至少提供了一个实现。该实现位于默认库位置,并将libm.so与 链接-lm。
如果您有一个更快(甚至可能以不太准确为代价)的库并且您知道可以使用,您就可以覆盖系统提供的math.h libm.so实现。
早期的 CRAY 系统(我没有开发过)确实优化了一些数学实现,以不进行正确的“完整”数学运算,因为要获得 100% 正确的答案,您需要使用以下命令“完成”组装操作由于计算中有效数字的数量,这些代码通常并不重要。(根据我对华盛顿特区密码学博物馆展览的理解)
多种实现的问题是您现在有一个选择,而标准 C 库的结构不为您提供实现的选择。