My developing/producing environments are all CentOS-7.7. In order to compile my program with gcc-8.3.0, I have installed "devtoolset-8" on my developing env, but it can not be used in the way same as gcc-4.8.5 that was shipped with CentOS7 oringinally. Every time I need to compile a program, I must use "scl enable devtoolset-8 -- bash" to switch to gcc8 instead of gcc4.8.5.
When the program was deploying onto the producing-env, there is no gcc8, nor libstdc++.so.6.0.25, so it can not run. I guess libstdc++.so.6.0.25 should be released with gcc8? I can neither install "devtoolset-8" on the producing-env, nor build gcc8 from source on the producing env. The version of libstdc++ that can be installed from the official yum repo of CentOS, is libstdc++.so.6.0.19, hence my programs can not be loaded at the producing-env. How to let such programs to run?
Thanks! Pls forgive my Ugly English.
In order to not have to copy or ship a separate libstdc++.so
but rather link statically (as suggested in a comment) against the C++
runtime, one can link C++
programs with -static-libstdc++
(also specifying -static-libgcc
will also make sure that the program does not depend on a recent enough version of libgcc_s.so on the system - although that should rarely be a problem).
There can also be the issue of the target system having a version of glibc
that is too old (relative to the build system). In that case, one could anyhow compile gcc
of no matter how recent of a version on the older system, so that the resulting C++
executables as well as libstdc++
are linked against the older glibc
. Linking C++
programs with -static-libstdc++
will again help to not depend on the program having to be able to find libstdc++.so
at run-time.
Finally, the C++
program could also be linked with -static
not depending on any dynamic libraries at all.