Skip to content

C++ and Mavericks

1 message · Brian Ripley

#
It was not clear from any of the documentation that Xcode 5.0.1 for 10.8 
and for 10.9 use (by default) essentially separate C++ toolchains.

Both are based on clang++ "3.3svn" which is Apple parlance for 'some 
version less than 3.3 and lacking some 3.2 features'.  But they have 
different headers and C++ libraries.

- 10.8 is using those from g++ 4.2.1
- 10.9 is using those from libcxx.

This means that they are not completely ABI-compatible, and any package 
with C++ linkage (e.g. packages rgdal and rzmq) may need the external 
software recompiled. [NB: clang++ vs g++ were ABI compatible in 10.8. 
And 'may' not 'will'.]

10.9 contains a back-compatibility libstdc++, and most binary packages 
using C++ still work.  However, at least for me JAGS (and hence packages 
rjags and runjags) and BioC package mzR segfault.  I successfully 
re-compiled JAGS and rjags from their sources, but mzR will not compile.

There are about 35 C++-based CRAN packages which do not compile using 
clang++ plus libcxx.  The usual issues: g++ headers include other 
headers not required by the standards which other implementations do 
not, g++ uses 'tr1' for headers where libcxx does not, and more 
comprehensive implementations result in ambiguous matches.