Ofe*_*lon -1 linux windows shared-libraries
我的背景是 Windows,我是 Linux 菜鸟。仍然试图围绕一些基本概念,特别是系统库:
这是正确的比喻吗?(ntdll + CRT) <===> libc ?
我意识到 C 和 Unix 是一起进化的,但仍然感到惊讶。是否可以将 C 接口硬连接到 Unix/Linux 的操作系统中?在 Windows 中,非 C 程序链接到底层操作系统提供的 dll。在 Linux 中是否有可能没有 OS/C 运行时边界?
通常,大多数程序链接到 libc,即使它们是用另一种语言编写的。它提供 C 标准库接口(如 MSVCRT)、POSIX 特性(相当于 Win32 子系统的某些部分)和系统调用的包装器。例如,Rust 使用 libc 是因为它提供了一个可移植的环境来链接。
然而,在Linux上,你不必须反对的libc链接。Go 选择直接进行系统调用,这意味着它可以发送没有运行时依赖项的静态二进制文件。这是可能的,因为 Linux 保证了稳定的内核 ABI,但并非所有操作系统都这样做(例如,macOS)。因此,除非您拥有大量资源(例如整个编程语言团队),否则这通常不是明智之举,除非您只使用少数系统调用。
我应该指出,即使 Windows 本质上也与 C 语言相关联:它使用 C 字符串(授予的,通常是宽 C 字符串)进行系统调用,并且大部分内核都是用 C 编写的。即使您从从头开始,您仍然需要一个通用的 C 接口,因为几乎每种编程语言都有与 C 交互的方式。
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |