我的开发/生产环境都是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,所以它无法运行。我想应该和gcc8一起发布libstdc++.so.6.0.25?我既不能在producing env上安装"devtoolset-8“,也不能在producing-env上从源代码构建gcc8。可以从CentOS的官方yum代码库安装的libstdc++版本是libstdc++.so.6.0.19,因此我的程序不能在producing env中加载。如何让这样的程序运行?
谢谢!请原谅我的丑陋英语。
发布于 2020-03-09 12:50:12
为了不必复制或发布单独的libstdc++.so,而是针对C++运行时静态链接(如注释中所建议的),可以使用-static-libstdc++链接C++程序(同时指定-static-libgcc还可以确保程序不依赖于系统上足够新的libgcc_s.so版本-尽管这不应该是问题)。
还可能存在目标系统的glibc版本太旧(相对于构建系统)的问题。在这种情况下,人们无论如何都可以编译gcc,无论旧系统上的版本有多新,这样生成的C++可执行文件以及libstdc++都可以链接到旧的glibc。将C++程序与-static-libstdc++链接将再次有助于不依赖于程序必须能够在运行时找到libstdc++.so。
最后,C++程序也可以与-static链接,根本不依赖于任何动态库。
https://stackoverflow.com/questions/60584713
复制相似问题