如何编译我的C ++文件以适用于所有Linux发行版。 我将编译它们的机器是Ubuntu 10.10
如果我在Ubuntu 10.10上编译它们,它们是否可以在其他发行版上工作,如ubuntu,fedora,debian,非debian发行版......等等?
答案 0 :(得分:7)
% gcc -o foo foo.c -static
生成的二进制文件应该适用于大多数发行版,因为它运行在相同的架构上(64位,32位,arm,mips等)。
重点是:由于您不知道预先在目标系统上可以找到什么,因此您必须将所有内容捆绑到您正在发送的二进制文件中,或者在您部署的某种“chrooted”环境中外部库也是(不能静态链接的东西)然后有一些包装器来使用你部署的库而不是系统库。
答案 1 :(得分:3)
虽然@akira的答案可能适用于您的情况,但它不是最好的解决方案。大多数Linux发行版都有打包系统,可以为你检索依赖项。
如果你真的想要编写用于其他人盒子的Linux软件,那么你需要研究'GNU Autotools',它驱动'./configure&&使所有&& make install'你现在已经运行了不止一次的东西!
答案 2 :(得分:2)
它比应该更难,至少对于C ++:http://www.trilithium.com/johan/2005/06/static-libstdc/
答案 3 :(得分:1)
如果您只使用Linux Standards Base中列出的库,则动态可执行文件应该没问题。
对于其他库,要么链接到它们的静态版本,要么运送动态库;我更喜欢前者。
我个人建议避免静态链接C库,因为这会阻止它提供的一些有用的功能,例如nss的东西..