据我了解,C 库必须与编译器一起分发。例如,GCC 必须分发它自己的 C 库,而 Forte 必须分发它自己的 C 库。我的理解正确吗?
但是,用 GCC 编译的用户库可以与 Forte C 库一起使用吗?如果两个 C 库都存在于系统中,那么在运行时将调用哪个?
此外,如果应用程序链接到多个库,其中一些库是使用 GCC 编译的,另一些库是使用 Forte 编译的,那么使用 GCC 编译的库是否会自动链接到 GCC C 库,对于 Forte,它的行为是否相同。
最佳答案
GCC 带有 libgcc,它包括辅助函数来执行诸如长除法之类的操作(或者甚至更简单的操作,例如在没有乘法指令的 CPU 上执行乘法)。它不需要特定的 libc 实现。 FreeBSD 使用 BSD 派生的,glibc 在 Linux 上非常流行,并且有专门用于嵌入式系统的,如 avr-libc。
系统可以安装许多库(libc 和其他),选择它们的规则因操作系统而异。如果您静态链接,它完全在编译时确定。如果您动态链接,则版本控制和路径规则会起作用。通常你不能在运行时混合和匹配,因为库的一些部分(来自头文件)被编译到可执行文件中。
如果两个编译器都遵循平台的 ABI,那么它们的编译产品应该是兼容的。这就是定义特定寄存器和调用约定的目的。
关于C 库与编译器一起分发还是直接由操作系统分发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6040801/