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

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

如果我包括<stdlib.h><stdio.h>在C程序中,编译时不需要链接这些,但我必须链接到<math.h>,使用-lm以GCC为例:

gcc test.c -o test -lm

原因是什么?为什么我必须显式地链接数学库,而不是其他库?


www说
浏览 584回答 3
3回答

慕姐8265434

因为没有人愿意修复的荒谬的历史实践。将C和POSIX所需的所有功能合并到一个库文件中,不仅可以避免反复询问这个问题,而且可以在动态链接时节省大量的时间和内存,因为每个.so文件链接需要文件系统操作来定位和找到它,并为其静态变量、重定位等提供几个页面。一个实现,其中所有函数都在一个库中,而-lm,&nbsp;-lpthread,&nbsp;-lrt等选项都是无操作的(或链接到空的)。.a(文件)完全符合POSIX,当然更好。注意:我说的是POSIX,因为C本身并没有指定编译器是如何被调用的。这样你就可以gcc -std=c99 -lm作为特定于实现的方式,编译器必须为一致性行为而被调用。
打开App,查看更多内容
随时随地看视频慕课网APP