Supporting C++11 on old OS X (Was: kdevelop 4.7 and beyond (was: clang++-mp-3.4 doesn't find initializer_list on OS X 10.6))

Brandon Allbery allbery.b at gmail.com
Mon Sep 8 11:44:38 PDT 2014


On Mon, Sep 8, 2014 at 2:35 PM, Lawrence Velázquez <larryv at macports.org>
wrote:

> So if we start using our own libc++abi on older OS X, wouldn't C++
> binaries built with Xcode's compilers be unable to interoperate with
> binaries built with MacPorts compilers?
>

Only if you try to use it for pre-C++11; but in that case we use the
system's runtime.

Short history lesson:

Originally, C++ did not have a formal runtime ABI/API; the C++ standard
specifically said that it was compiler specific. As a result, C++ compilers
generally did not interoperate at all.

C++11 recognized that this was a problem and formalized the API. All C++11
compatible compilers use the same runtime API and can interoperate.

libstdc++ vs. libc++ tends to be a proxy for this conflict on OS X, because
Apple had been shipping the last GPL2-licensed libstdc++, which did not
have C++11's API. Apple won't ship GPL3, so they won't update libstdc++ to
support C++11; instead they started shipping libc++, which supports C++11
and is not GPL3. But the fundamental problem is not libc++ vs. libstdc++;
if you are not hampered by GPL3 (as on Linux), you can use a modern
libstdc++ interchangeably with libc++.

So the cases here are:

- pre-C++11 C++ support must use the system libstdc++ (the binary-only
backward compatibility one on newer systems whose development C++ runtime
is libc++).

- C++11 C++ support must either face the license issue of a later libstdc++
or use libc++. In either case, the system C++ runtime cannot be used on
older systems. On newer systems where Apple shipped C++11, the system
runtime is libc++ and C++11 compatible, so use it.

- The case of pre-C++11 libc++ does not come up because Apple has not to my
knowledge ever shipped this.

In summary, on pre-C++11 systems you need to provide a different C++
runtime no matter what; on C++11 systems you can always use Apple's runtime.

-- 
brandon s allbery kf8nh                               sine nomine associates
allbery.b at gmail.com                                  ballbery at sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/macports-dev/attachments/20140908/0fea84bf/attachment.html>


More information about the macports-dev mailing list