Running an Intel-compiled binary on older Mac OS X system gives dyld: unknown required load command 0x80000022


Problem : I compile a program on a Mac OS X 10.6 system, but run the binary on an older Mac OS X system such as 10.5 or 10.4.  The program aborts immediately without starting with error "dyld:  unknown required load command 0x80000022"


Environment : Mac OS X, mixed OS versions.  Intel Fortran Compiler for Mac OS X, Intel C++ Compiler for Mac OS X


Root Cause :
Generally, if you are targeting your applicaiton to run on multiple versions of Mac OS X, you should use the 'least common denominator' approach of developing on the older OS version.  This is because newer version may have extended the base OS API but generally newer versions will maintain backwards compatibility.

Resolution :
Although there is no guarantee for backwards compatibility, if you have a newer version of Mac OS X as your development platform, follow these guidelines:

compile and link with option   -static-intel   ( for older compilers, -i-static )
Pass linker option:     -Wl,-macosx_version_min,10.4
so
ifort -static-intel -Wl,-macosx_version_min,10.4   ...other options...
icc -static-intel -Wl,-macosx_version_min,10.4   ...other options...
icpc -static-intel -Wl,-macosx_version_min,10.4   ...other options...

The -static-intel will statically link all Intel compiler runtime libraries into your executable so that you will not need these DYLD libraries on the target computer.

The -Wl,-macosx_version_min,10.4  passes the argument  -macosx_version_min 10.4

to your ld linker.  This tells the linker to create headers and sections for the executable that are backwards compatible to Mac OS X 10.4.  Another option might be 10.5.  Please read your 'ld' man page or documentation for allowed options.

EXCEPTION:  the linker provided with Xcode 4.0.1 on Snow Leopard is rejecting the -macosx_version_min option, although it is documented in the 'ld' man page.  We believe this is a recent bug in the Apple linker and hope that it is addressed shortly ( Apr 2011 )

For more complete information about compiler optimizations, see our Optimization Notice.

1 comment

Top
anonymous's picture

The solution shown here may help in some cases, but fail on other cases. The reason for the loader error message is some new loader command introduced in OS X 10.6. For more details and a possilbe solution, visit my blog. Good luck!
http://grauonline.de/wordpress/?p=71

Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.