Intel® C++ Compiler 18.0 Developer Guide and Reference
The following topic applies to
Xcode*.
Consider the following source file, HelloWorld.cpp.
#include <iostream> using namespace std; int main() { char* platform; #if defined( __i386__) platform = "IA32"; #elif defined(__x86_64__) platform = "Intel® 64"; #else platform = "????"; #endif cout << "Hello, " << platform << " World!" << endl; return 0; }
To build a universal binary executable from HelloWorld.cpp:
icc -m32 -o HelloWorld_32 HelloWorld.cpp
icc -m64 -o HelloWorld_64 HelloWorld.cpp
lipo -create -arch i386 HelloWorld_32 -arch x86_64 HelloWorld_64 -output HelloWorld
To confirm that your process generates the correct result for both architectures, run the file utility on your universal binary:
file HelloWorld HelloWorld: Mach-O universal binary with 2 architectures HelloWorld (for architecture i386):Mach-O executable i386 HelloWorld (for architecture x86_64): Mach-O 64-bit executable x86_64
Hello, Intel® 64 World
And on a system based on IA-32 architecture, the output is:
Hello, IA32 World