我将安装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
- 1 回答
- 0 关注
- 313 浏览
添加回答
举报
0/150
提交
取消