gcc5 and std::string
PICCA Frederic-Emmanuel
frederic-emmanuel.picca@synchrotron-soleil.fr
Fri Sep 11 13:50:00 GMT 2015
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@gmail.com]
Envoyé : vendredi 11 septembre 2015 15:27
À : PICCA Frederic-Emmanuel
Cc : gcc-help; taurel@esrf.eu; 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
More information about the Gcc-help
mailing list