c - 为什么必须链接 C 中的数学库?

标签 c compilation math.h

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

gcc test.c -o test -lm

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

最佳答案

stdlib.hstdio.h 中的函数在libc.so(或libc.a 用于静态链接),默认情况下链接到您的可执行文件(就像指定了 -lc 一样)。可以指示 GCC 避免与 -nostdlib 的自动链接。或 -nodefaultlibs选项。

math.h 中的数学函数在 libm.so(或用于静态链接的 libm.a)中有实现,并且 libm 默认不链接。 libm/libc 的 split 是有历史原因的,但都不是很有说服力。

有趣的是,C++ 运行时 libstdc++ 需要 libm,所以如果你用 GCC (g++) 编译 C++ 程序,你会自动得到libm 链接进来。

关于c - 为什么必须链接 C 中的数学库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1033898/

相关文章:

c - 在具有重复值的未排序数组中查找缺失的数字

linux - 我可以运行从更高版本的 gcc 编译的二进制文件吗?

c++ - Visual Studio下CMake构建问题

gcc - 与 'gcc' 和 '-lm' 相关的链接错误

javascript - 从 javascript 访问 native C 函数

c - 安全软件讨厌我的套接字

linux - Maven 的 pom 文件 java 版本规范

C - 简单的数学论证不起作用?

c++ - 来自 math.h 的函数使用 C++/clr 返回无效结果

python - CPython 中的 dprintf