严格来说,你不需要gcc,但你可能需要各种库.默认情况下,语言处理器生成动态链接的二进制文件,这需要以库的形式提供大量的运行时支持,并且必须在目标系统上找到兼容的版本,可以替换在开发主机上链接的版本.
这要求目标是相同操作系统的类似版本,例如linux到linux.版本偏斜有更微妙的问题.在Windows上,这被称为DLL-hell.
您可以通过静态链接将自己与许多这些问题隔离开来.这将使可执行文件变大,并且它将不再共享内存(除了自身的其他实例),但程序将能够承受更多的目标版本偏差.
gcc 将 C 编译为机器代码,这意味着该代码只能在编译它的相同体系结构上运行。此外,通常还存在对其他二进制文件(例如 C 运行时、posix、Win32)的依赖关系,因此,如果您在 Ubuntu 上编译程序,即使没有安装 gcc,它也会在 Ubuntu 上运行,但不会在 Windows 或其他操作系统上运行。 Unix(如 Solaris 或 HPUX)。
这就是 C 与 Java 和 C# 的不同之处,其中代码被编译为虚拟机代码并在具有该语言运行时 (JVM/CLR) 的任何系统上运行。其他可移植语言是脚本语言(Perl/Python/JavaScript),其中脚本可以在有解释器的任何地方运行。