运行 在没有 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
编辑,完全不依赖于任何动态库。
我的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
编辑,完全不依赖于任何动态库。