Linux,在一个主机上编译一段代码,在另一个主机上运行?

时间:2012-10-09 09:47:02

标签: linux cross-compiling abi

代码用c / c ++编写,可能依赖于编译主机中的一些库; 它应该在没有libs的另一个主机上运行,​​具体取决于问题。两个主机都是linux,可能有不同的版本。 你有一个好的策略吗?

4 个答案:

答案 0 :(得分:3)

Linux上的纯静态链接是discouraged,只有使用替代的libc(例如dietlibc)才能真正实现,而这种替代libc不是C ++的选项,我的favoured方法是构建您必须支持最旧版本的Linux上的应用程序,因为较新的libc版本将具有向后兼容性。

这只包括libc,其他要求,如gtk,pangom等必须直接编译到你的二进制文件中。

答案 1 :(得分:2)

静态链接应用程序,以便它依赖于尽可能少的动态加载库。这是解决这个问题的一般方法。

其他解决方案包括:

  • 将所需的库与应用程序一起发送,并覆盖系统的LD_LIBRARY_PATH变量,使包含的版本成为首选版本。
  • 编写代码以使用dlopen()和朋友动态加载库,并手动处理库版本的差异。

答案 2 :(得分:0)

大多数平台都有明确定义的ABI,涵盖C代码,但涵盖C ++功能的ABI尚未普及。

使用libc用c ++编写的程序可能无法在另一个平台上运行。 如果二进制兼容性是一个重要问题,请考虑使用c。

答案 3 :(得分:0)

考虑此问题的所有答案(静态链接,在最旧的Linux上编译等),然后通过Linux App Checker检查最终二进制文件,以显示与其他Linux发行版的兼容性问题。

enter image description here