如何将我的C++文件编译成在所有Linux发行版上都可以运行的代码。 我将在Ubuntu 10.10上编译这些文件。
如果我在Ubuntu 10.10上编译,它们是否也能在其他发行版上正常工作,例如ubuntu、fedora、debian、非debian发行版等?
% gcc -o foo foo.c -static
生成的二进制文件应该可以在大多数发行版上运行,只要它们在相同的架构上运行(64位、32位、ARM、MIPS等)。
主要问题在于:由于您事先不知道目标系统上会有什么,因此您必须将所有可能的东西捆绑到您要发布的二进制文件中,或者将其放在某种“chrooted”环境中,在那里您可以部署外部库(无法静态链接的内容),然后使用包装器来使用您部署的库而不是系统库。
虽然@akira的回答可能适用于您的情况,但它并不是最好的解决方案。大多数Linux发行版都有打包系统,可以为您检索依赖项。
如果您认真考虑编写在其他人的计算机上使用的Linux软件,您将需要研究“GNU Autotools”,这就是驱动“./configure && make all && make install”所需的东西,您现在已经运行了多次!
只要您仅使用Linux标准库中列出的库,动态可执行文件应该是可以的。
对于其他库,请链接它们的静态版本或者提供动态库;我更喜欢前者。
个人建议避免静态链接C库,因为这会阻止一些由其提供的有用功能工作,例如nss等。