c++ - 旧发行版上的二进制兼容性(使用 C++11)

标签 c++ linux ubuntu gcc c++11

我正在使用 GCC 在 Ubuntu 13 上编译 C++ 应用程序。我希望能够在我的代码中使用 C++11 功能,但同时仍然能够生成我的用户可以运行的二进制文件旧版本的 Ubuntu。

如果我使用最新版本的 GCC 在 Ubuntu 13 上编译,我的二进制文件将无法在 Ubuntu 12 上运行,因为 glibc 不向前兼容: ( How compatible are different versions of glibc? )

  • 我有哪些选择?

  • 这是否可能不需要我的用户跳过大量的障碍?

  • 如果没有,我的用户必须做什么才能运行二进制文件(即他们能否在旧版本的 Ubuntu 上安装更新的 glibc)?

注意:我不想考虑静态链接 glibc,因为:

  1. 我读到这是一个非常糟糕的主意
  2. 许可问题
  3. 跨发行版兼容性问题

目前我的应用程序不使用任何 C++11 特性,我在旧版本的 Ubuntu 上使用旧版本的 GCC 编译以避免这个问题。但是不能使用最新最好的语言特性让我很难过:(

最佳答案

您可以尝试使用 Boost Libraries,它具有与 C++11 完全相同的功能,并且比 C++11 “更兼容”:它可以很容易地在旧版本上编译Ubuntu。

否则最好的选择可能是要求 Ubuntu 12.04 的用户将 GCC 从 4.6 升级到 4.7 或更新版本: http://www.swiftsoftwaregroup.com/upgrade-gcc-4-7-ubuntu-12-04/

关于c++ - 旧发行版上的二进制兼容性(使用 C++11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20131275/

相关文章:

linux - 如何从多个文件中提取一列,并将这些列粘贴到一个文件中?

linux - ARM 交叉编译 Expect

ubuntu - 使用 apt-get 更改 Ubuntu 安装上的默认 JENKINS_HOME 目录?

c++ - 对封闭类成员的嵌套类访问

c++ - 这是使用递归的正确方法吗?

c++ - 计算地址对齐

java - Ubuntu 下的 OpenJDK 11 支持 TLSv1.3 吗?

c++ - 将文件的当前写入指针传递给 C++ 中的函数

c - 使用硬件性能计数器是个好主意

amazon-web-services - EC2 实例自行关闭