On Jan 19, 2014, at 6:43 PM, Reijo Sund <[email protected]> wrote:
> Using the latest patched R 3.0.2 on Mac OS X Maverics (10.9.1) with Xcode
> 5.0.2 command line tools and clang set as a compiler, the following kind of C
> code somewhere in a package results in a dynamic link to symbol
> ___sincos_stret:
>
> double sincos(double n) { return(sin(n)+cos(n)); }
>
> It is obvious that ___sincos_stret is an LLVM optimization: if code calls
> sin(n) and then cos(n) and uses both results, the compiler will make one call
> to the structure-returning sincos method.
>
> The actual problem is that such symbol is available in system library
> /usr/lib/system/libsystem_m.dylib only since Mavericks (10.9 SDK) and a
> package installed from binary (.tgz) compiled on 10.9 but run on 10.8 or
> older fails: Symbol not found: ___sincos_stret
>
> One ”solution" is to make minor changes to the C code so that compiler won’t
> detect a need for optimization. A better solution is to use compiler flag
> -mmacosx-version-min=10.8. However, these solutions to a single concrete
> problem give only partial answers to the more general question:
>
> How to (maximize the possibility to) create OS X 10.6+ (i.e. R 3.0.0+)
> compatible .tgz binary packages using a computer with OS X 10.9 and Xcode 5.0
> (and without using CRAN or RForge building services)?
>
Use the 10.6 SDK (e.g. via -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk)
and -mmacosx-version-min=10.6 flags for both linking and compilation.
Note, however, that 10.6 SDK is no longer supplied with Xcode 5, so you'll have
to pick it from an older Xcode package.
BTW, the missing symbol is your least worry - the linker has changed since 10.8
so any binaries compiled for 10.8+ don't even load in 10.6. Using the SDKs can
be problematic if you have dependent libraries, because most non-Mac tools
don't know how to deal with SDKs and may pick some system library
inadvertently. So if you're only concerned about your package then give it a
shot and test it under 10.6 to see if it works. The most reliable way is still
to run 10.6 VM in 10.9 if you want 100% guarantee.
Cheers,
Simon
> Any tips would be appreciated.
>
> Best wishes,
> Reijo Sund
>
> _______________________________________________
> R-SIG-Mac mailing list
> [email protected]
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>
_______________________________________________
R-SIG-Mac mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-mac