为了账号安全,请及时绑定邮箱和手机立即绑定

如何在最新的Linux上编译程序以在旧的Linux上运行

如何在最新的Linux上编译程序以在旧的Linux上运行

阿晨1998 2021-04-01 14:11:27
我将安装Arch Linux与对决启动的Linux Mint 18.1结合使用。在我的大学中,我们安装了lubuntu 16.04和Ubuntu 14.04。我还启用了Arch Linux中的测试库,因此我获得了更新的软件包,因此,由于此原因,当我在Arch上编译任何C ++程序时,由于共享库的版本与Mint不匹配,它将无法在Linux Mint上运行。像libMango.so.64在拱形中,而libMango.so.60在薄荷上。我该如何克服呢?所以我要问如何用较新的编译器和共享库编译任何C / C ++,以便与旧的共享库一起正常运行?就像我在带有-m32标志的64位计算机上编译32位程序一样,旧共享库也有标志吗?我正在使用gcc 8.1。
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

如何使用较新的编译器和共享库编译任何C / C ++,以便与旧的共享库一起正常运行?

如果这些库的API(甚至ABI,包括内部结构的大小和对齐方式,字段偏移,vtables组织)发生了不兼容的更改您将无法可靠地执行此操作

通常,最好在另一台计算机上重新编译源代码(如果该源与您的学历无关,那么您的大学可能会禁止这样做)。顺便说一句,如果您的源代码位于某个git存储库中(例如github,如果它是开放源代码),则在多台计算机上进行传输非常容易。

一些极少数的库在与二进制格式的其他版本兼容(例如在ABI级别)上做出了真正的(并有文件证明)的努力,但这并不常见。在Unix的和免费软件的传统是关心源码级兼容。和POSIX标准只关心源代码的兼容性。

您可能会考虑使用某些chroot环境(请参阅chroot(2)和path_resolution(7)&凭据(7)),以将较早发行版的基本部分包含在较新发行版中。详细信息是特定于发行版的(在Debian和Ubuntu上,另请参见schroot和debootstrap)。您也可以考虑在某些VM中运行完整发行版,或者使用Docker等容器。

而且您可能会尝试静态链接(本地)可执行文件,因此请使用 g++ -static


查看完整回答
反对 回复 2021-04-16
  • 1 回答
  • 0 关注
  • 313 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信