just to be sure to understand, I rebuilt both projects with gcc 5.2 but in one case I got a std::string with the old API and in another a symbol with the new CXX11 abi. I do not try to link a project compiled with the new ABI and a library with old version. What I understood is that std::string is special because two symbols are emitted on in the normal name space but with the cxx11 abi and one in the __cxx11 namespace. In pytango the symbol emited by gcc5.2 is the once without the __cxx11 namespace _ZN5Tango17ranges_type2constIsE3strE -> Tango::ranges_type2const<short>::str but if I understand correctly this string is cxx11 abi with the same old name mangled. BUT in tango the symbols emited by gcc are :/usr/lib/i386-linux-gnu$ nm -D libtango.so.8.1.2 | grep ranges_type | c++filt 0045f258 D Tango::ranges_type2const<bool>::enu 00460dfc B Tango::ranges_type2const<bool>::str[abi:cxx11] 0045f280 D Tango::ranges_type2const<double>::enu 00460fdc B Tango::ranges_type2const<double>::str[abi:cxx11] 0045f27c D Tango::ranges_type2const<float>::enu 00460fac B Tango::ranges_type2const<float>::str[abi:cxx11] 0045f26c D Tango::ranges_type2const<unsigned char>::enu 00460eec B Tango::ranges_type2const<unsigned char>::str[abi:cxx11] 0045f278 D Tango::ranges_type2const<long>::enu 00460f7c B Tango::ranges_type2const<long>::str[abi:cxx11] 0045f268 D Tango::ranges_type2const<unsigned long>::enu 00460ebc B Tango::ranges_type2const<unsigned long>::str[abi:cxx11] 0045f25c D Tango::ranges_type2const<Tango::DevEncoded>::enu 00460e2c B Tango::ranges_type2const<Tango::DevEncoded>::str[abi:cxx11] 0045f250 D Tango::ranges_type2const<Tango::DevState>::enu 00460d9c B Tango::ranges_type2const<Tango::DevState>::str[abi:cxx11] 0045f254 D Tango::ranges_type2const<char*>::enu 00460dcc B Tango::ranges_type2const<char*>::str[abi:cxx11] 0045f270 D Tango::ranges_type2const<short>::enu 00460f1c B Tango::ranges_type2const<short>::str[abi:cxx11] 0045f260 D Tango::ranges_type2const<unsigned short>::enu 00460e5c B Tango::ranges_type2const<unsigned short>::str[abi:cxx11] 0045f274 D Tango::ranges_type2const<long long>::enu 00460f4c B Tango::ranges_type2const<long long>::str[abi:cxx11] 0045f264 D Tango::ranges_type2const<unsigned long long>::enu 00460e8c B Tango::ranges_type2const<unsigned long long>::str[abi:cxx11] So my question now is why in one case the [abi:cxx11] is present (tango) and not in the other (pytango) I use the same compiler in both cases. Except that for pytango I am building a python extension and it calls gcc instead of g++. But I guess thath gcc is clever enought to understand that this is a c++ file. Sorry if this is trivial for you. But I try to understand clearly where is the problem. Thanks ________________________________________ De : Jonathan Wakely [jwakely.gcc@xxxxxxxxx] Envoyé : vendredi 11 septembre 2015 15:27 À : PICCA Frederic-Emmanuel Cc : gcc-help; taurel@xxxxxxx; Avi Kivity Objet : Re: gcc5 and std::string On 11 September 2015 at 14:24, Avi Kivity wrote: > > This post explains it: > > http://developerblog.redhat.com/2015/02/05/gcc5-and-the-c11-abi/ Also http://fedoramagazine.org/gcc-5-in-fedora-whats-an-abi-and-what-happens-when-we-change-it/ and https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html