Reputation: 307
On the CentOS 7.5 operating system, the gcc compiler version 13.3 was built from the source code. Using this compiler, the test program was built
g++ main.cc -std=c++20
After the build, the program runs and works correctly. Then the program was "handed over to the customer", where he tried to run it on the same operating system, but where the default compiler gcc version 4.8.5 was installed. As a result, the following errors were received:
/a.out: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /a.out)
/a.out: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /a.out)
/a.out: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /a.out)
/a.out: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /a.out)
Is it possible to configure the new compiler so that the programs it builds are portable? After all, it somehow works when the compiler is installed from devtoolset-11 (the programs built there work on machines without this compiler).
Upvotes: -1
Views: 103
Reputation: 18090
Solutions that worked for me
-static-libgcc -static-libstdc++
(i actually do this in one of my projects linux releases)libgcc.so
and libstdc++.so
and you need to add the folder containing them to the start of the LD_LIBRARY_PATH
before starting the executable (a shell script can help with this, but you can create a C wrapper that does this, which i did in a commercial application i worked on before), you may also need to set -Wl,-rpath,$ORIGIN
when compiling depending on what system you are targetting. (The priority order of them changed over the years)Shipping libgcc may not be necessary depending on how old the target system is, you'll have to test it out.
Also beware that redistribution licensing restrictions of libstdc++
apply, so if this is a commercial application then you could use clang libc++ instead which has no license restrictions
Upvotes: 0
Reputation: 31458
Check out Red Hat Developer Toolset. It does what you want - let's you use a newer compiler than the default one and produce binaries that are compatible with the base system.
Upvotes: 1