[cfe-dev] Current state of libcxx compatibility with libstdc++

Dave Johansen via cfe-dev cfe-dev at lists.llvm.org
Tue Aug 9 08:58:04 PDT 2016


On Tue, Aug 9, 2016 at 4:03 AM, Jeroen Ooms via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> [ This is probably a FAQ, however Google gives a lot of conflicting and
> outdated information... ]
>
> We are trying to add support for compiling R packages with C++11 code on
> CentOS 6/7 using standard compilers from CentOS/EPEL repositories. Because
> gcc/libstdc++ on CentOS are too old (4.4.7), Tom Callaway has recently
> added libcxx and libcxxabi [1,2] to Fedora/EPEL. We can now build C++11
> code natively on CentOS with clang:
>
>   clang++ -stdlib=libc++ -std=c++11 example.cpp
>
> Awesome. However for code which links to c++ system libraries (which are
> compiled with gcc) this sometimes results in linking errors. For example a
> test application geometry.cpp [3] which links to the
> "ImageMagick-c++-devel" package:
>
>   clang++ -stdlib=libc++ -std=c++11 geometry.cpp $(pkg-config --cflags
> --libs ImageMagick++)'
>
> This fails with:
>
>   geometry.cpp:(.text+0xd9): undefined reference to
> `Magick::Geometry::Geometry(std::__1::basic_string<char,
> std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
>   geometry.cpp:(.text+0x2ed): undefined reference to
> `Magick::Geometry::operator std::__1::basic_string<char,
> std::__1::char_traits<char>, std::__1::allocator<char> >() const'
>
> Is this expected? Is there any way we can work around this to link c++
> programs compiled with libcxx against system libraries which are compiled
> with gcc? If not, might this be possible for future versions of libcxx or
> are the two simply incompatible on this level?
>
>
> [1] https://bugzilla.redhat.com/show_bug.cgi?id=1332306
> [2] https://bugzilla.redhat.com/show_bug.cgi?id=1332307
> [3] https://github.com/ImageMagick/ImageMagick/blob/master/
> Magick%2B%2B/tests/geometry.cpp
>

The better option for using newer C++ standards on RHEL machines is the
newer versions of GCC that come with the Developer Toolset:
http://developers.redhat.com/products/developertoolset/overview/

They are ABI compatible with the system version of GCC and the binary's
that are generated have the new features statically linked in so they can
be distributed to machines without needing to install the Developer Toolset.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160809/9f5ff4fb/attachment.html>


More information about the cfe-dev mailing list