This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
RE:gcc5 and std::string
- From: PICCA Frederic-Emmanuel <frederic-emmanuel dot picca at synchrotron-soleil dot fr>
- To: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- Cc: gcc-help <gcc-help at gcc dot gnu dot org>, "taurel at esrf dot eu" <taurel at esrf dot eu>, "Avi Kivity" <avi at cloudius-systems dot com>
- Date: Fri, 11 Sep 2015 13:51:52 +0000
- Subject: RE:gcc5 and std::string
- Authentication-results: sourceware.org; auth=none
- References: <A2A20EC3B8560D408356CAC2FC148E53B2F82EE1 at SUN-DAG3 dot synchrotron-soleil dot fr> <55F2D60E dot 8060707 at cloudius-systems dot com>,<CAH6eHdQsk5MK752bUbBad57VQc8dJeOqFAXtPv8svBvzRfChSw at mail dot gmail dot com>
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