C 库与编译器一起分发还是直接由操作系统分发?

标签 c linux compiler-construction solaris

据我了解,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/

相关文章:

c - C 中的 fread 和 fwrite 链表

linux - 使用 shell 脚本为 oracle db 杀死长时间运行的多个 session

java - 不安全操作、未经检查的转换

c - 无法重新连接到 ODBC 连接

c - c代码错误

c - 访问冲突写入位置 0x61d1e5bc

linux - 向每列添加多个值

linux - Lisp 工具包 (ltk) : Cannot get SCALE :variable value

macos - MacOSX 10.6 上的 getline 崩溃 C 编译器?

c - C中从文件中读取字符串输入