Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22248

How do I force cxx11 ABI on Red Hat?

$
0
0

I'm building a small .so library on Ubuntu 16.04 and Red Hat 7 using gcc 7.3. When I check the export symbol names using the nm command, I find that the library compiled on Ubuntu uses the cxx11 ABI but the library compiled on RedHat does not.

For example, the export symbol for a function compiled on Ubuntu looks like this.

_Z12customLoad3DPKN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEEPP11IVolumeDataPSA_

But the same export symbol when compiled on RedHat looks like this.

_Z12customLoad3DPKN8nlohmann10basic_jsonISt3mapSt6vectorSsblmdSaNS_14adl_serializerEEEPP11IVolumeDataPS4_

Both libraries use the same makefile. The code uses #define _GLIBCXX_USECXX11_ABI 1 and command line option -std=c++11. I’ve also tried using the -fabi-version option with different values, all with no effect. I can’t resolve this with the #ifdef __cplusplus extern "C" method because the functions use template class parameters.

How do I force gcc on RedHat to use the cxx11 ABI? I can’t use dual ABI linkage because the .so library is used as a plugin for an app that links at runtime to functions in the library using a hardcoded list of mangled names. The plugin won’t work on Red Hat because the mangled names don’t match the program’s expectations. How do I fix this?

Thanks!


Viewing all articles
Browse latest Browse all 22248

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>