在 Ubuntu 中编译二进制文件的可移植性如何?

hio*_*obs 5 gcc binary

事实上,标题说明了一切。但请允许我指定问题:

假设我要编译一个使用 libffi、libGL、dlfcn 和 SDL 的应用程序,会说二进制文件在具有相同架构的其他 Linux 发行版上运行吗?

我问的原因是因为目录/usr/lib/i386-linux-gnu- 我可能错了,但我认为这个目录是特定于 Ubuntu 的,不是吗?

那么,在 Ubuntu 上编译的二进制文件到底有多便携?

Tho*_*ard 11

例如,当您nginx从源代码编译二进制文件时,它是使用有关编译二进制文件的系统上的库版本的信息构建的。要引用的库当然由参数决定(对于nginx,这是您要激活或不激活哪些模块的定义)。但是您构建的二进制文件(不太可能)在单独的系统上运行,除非它是一个配置相同的系统。

您将希望在每个单独的系统上编译应用程序,您(相对)不太可能将编译后的版本移植到另一个可能没有每个库的兼容版本的系统。

注意:虽然您可以将二进制文件移植到另一个 Linux 系统,但这是不明智的,而且通常很耗时。这是因为:
(1) 您需要确保将二进制文件移动到的系统使用的版本与libc用于编译二进制文件的版本相同
(2) 您需要确保在程序能够在您的系统上轻松检测到,并且它们与用于创建程序的版本相同(或兼容)。

...当然还有其他需要考虑的变量。从长远来看,在每个系统上编译程序以使用它比试图争取可移植性更容易。