为了账号安全,请及时绑定邮箱和手机立即绑定

你为什么要连接C中的数学库?

你为什么要连接C中的数学库?

C
www说 2019-06-19 15:38:34
你为什么要连接C中的数学库?如果我包括<stdlib.h>或<stdio.h>在C程序中,编译时不需要链接这些,但我必须链接到<math.h>,使用-lm以GCC为例:gcc test.c -o test -lm原因是什么?为什么我必须显式地链接数学库,而不是其他库?
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

因为没有人愿意修复的荒谬的历史实践。将C和POSIX所需的所有功能合并到一个库文件中,不仅可以避免反复询问这个问题,而且可以在动态链接时节省大量的时间和内存,因为每个.so文件链接需要文件系统操作来定位和找到它,并为其静态变量、重定位等提供几个页面。

一个实现,其中所有函数都在一个库中,而-lm-lpthread-lrt等选项都是无操作的(或链接到空的)。.a(文件)完全符合POSIX,当然更好。

注意:我说的是POSIX,因为C本身并没有指定编译器是如何被调用的。这样你就可以gcc -std=c99 -lm作为特定于实现的方式,编译器必须为一致性行为而被调用。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 583 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信