[Interest] Qt 5.5 and Red Hat 5
Thiago Macieira
thiago.macieira at intel.com
Tue Mar 24 16:47:59 CET 2015
On Tuesday 24 March 2015 16:35:16 Nikos Chantziaras wrote:
> ++On 23/03/15 23:43, Thiago Macieira wrote:
> > On Monday 23 March 2015 20:28:10 Nikos Chantziaras wrote:
> >> There's ABI differences between libstdc++ versions when using C++11, so
> >> one has to wonder what happens when using C++11 in Qt (which was built
> >> with the RH dev toolset) and then the resulting application is used on
> >> vanilla RHEL without the toolset...
> >
> > On Linux, that's not a relevant question. We don't expose any of the
> > libstdc++ ABI in our ABI. All you need is the base C++ core language
> > support to be working (operator new, typeinfos, etc.).
>
> But even if you don't expose it, don't you still *use* it? Doesn't Qt
> have a dependency on libstdc++ since it uses it internally (by virtue of
> consisting of C++ code and being linked by g++)?
We use it. See also the now-going discussion in the dev mailing list abou
enabling C++14 too.
And we link to libstdc++ by the simple fact that we use "g++" to link the
libraries and that will automatically add a hidden "-lstdc++" to the linker.
Unlike on modern OS X, on Linux the core language support part of the C++
standard library (libsupc++) is not separated out from libstdc++. So yes, we
use symbols from libstdc++. The full list from QtCore is below.
> If Qt is built with -std=g++11 (or -std=c++11), then Qt itself depends
> on the C++11 ABI of libstdc++ it was built against, I think. That's why
That's incorrect.
> I'm asking what happens if you then run the Qt *.so libs on an older
> libstdc++.
That question can be answered if you take this discussion outside of the C++11
context: what happens if you link Qt to a given library A and then try to run
with an older version of it?
Full list of symbols from libstdc++ used by QtCore, when compiled:
U operator delete[](void*)
U operator delete(void*)
U operator delete(void*, std::nothrow_t const&)
U operator new[](unsigned long)
U std::exception::what() const
U std::bad_alloc::~bad_alloc()
U std::exception::~exception()
U operator new(unsigned long)
U operator new(unsigned long, std::nothrow_t const&)
U std::nothrow
U std::terminate()
U typeinfo for std::bad_alloc
U typeinfo for std::exception
U vtable for __cxxabiv1::__class_type_info
U vtable for __cxxabiv1::__si_class_type_info
U vtable for __cxxabiv1::__vmi_class_type_info
U vtable for std::bad_alloc
U vtable for std::exception
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Interest
mailing list