lm标志是需要链接数学库吗?
这个问题在这里已经有了答案:
因为没有人愿意解决的荒谬历史实践。 将C和POSIX所需的所有功能合并到一个库文件中,不仅可以避免这个问题得到反复询问,而且在动态链接时也可以节省大量时间和内存,因为链接的每个.so
文件都需要找到并找到它的文件系统操作,以及其静态变量,重定位等的几个页面。
一个所有函数都在一个库中并且-lm
, -lpthread
, -lrt
等选项全部为空操作的实现(或者链接到空的.a
文件)完全符合POSIX并且当然更可取。
注意:我在谈论POSIX,因为C本身没有指定如何调用编译器。 因此,您可以将gcc -std=c99 -lm
作为特定于实现的方式来处理编译器的符合性行为。
由于time()
和其他一些功能都builtin
在C库(定义libc
)本身和GCC总是链接到的libc,除非你使用-ffreestanding
编译选项。 然而,数学函数存在于libm
,而不是由gcc隐式链接。
上一篇: lm flag is needed to link the math library?
下一篇: combine two GCC compiled .o object files into a third .o file