运行 在没有 gcc 8 的生产环境中使用 gcc 8 构建的程序

Run a program built with gcc8 on a producing environment without gcc8

我的developing/producing环境都是CentOS-7.7。 为了用 gcc-8.3.0 编译我的程序,我在我的开发环境中安装了 "devtoolset-8",但它不能像 CentOS7 最初附带的 gcc-4.8.5 一样使用。 每次需要编译程序,都要用"scl enable devtoolset-8 -- bash"切换到gcc8而不是gcc4.8.5。

程序部署到producing-env时,没有gcc8,也没有libstdc++.so.6.0.25,所以不能运行。 我想 libstdc++.so.6.0.25 应该与 gcc8 一起发布?我既不能在生产环境中安装 "devtoolset-8",也不能在生产环境中从源代码构建 gcc8。 CentOS 官方 yum repo 可以安装的 libstdc++ 版本是 libstdc++.so.6.0.19,因此我的程序无法在 producing-env 加载。 如何让这样的程序运行?

谢谢! 请原谅我丑陋的英语。

为了不必在 C++ 运行 时间内静态地 link 复制或发送单独的 libstdc++.so(如评论中所建议的),可以 link C++ 带有 -static-libstdc++ 的程序(同时指定 -static-libgcc 也将确保该程序不依赖于 libgcc_s.so 上足够新的版本系统 - 尽管这很少会成为问题)。

目标系统的 glibc 版本太旧(相对于构建系统)也可能存在问题。在这种情况下,无论如何都可以编译 gcc,无论旧系统上的版本有多新,因此生成的 C++ 可执行文件以及 libstdc++ 都是 link针对较旧的 glibc 编辑。将 C++ 程序与 -static-libstdc++ 链接将再次有助于不依赖于必须能够在 运行 时找到 libstdc++.so 的程序。

最后,C++ 程序也可以 link 使用 -static 编辑,完全不依赖于任何动态库。