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