インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

コマンドラインからのユニバーサル・バイナリーのビルド

このトピックは、Xcode* にのみ適用されます。

次のソースファイル 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;
}

HelloWorld.cpp からユニバーサル・バイナリー実行ファイルをビルドするには、次の操作を行います。

  1. 環境変数を設定して、コンパイラー環境を初期化します。source コマンドを使用して compilervars.sh (または compilervars.csh) を実行します。
    source install-dir/bin/compilervars.sh<arg> ここで、<arg>ia32 または intel64 です。
  2. m32 オプションを指定してコンパイラーを起動し、オブジェクト・ファイル HelloWorld_32 を生成します。
    icc -m32 -o HelloWorld_32 HelloWorld.cpp
  3. m64 オプションを指定してコンパイラーを起動し、オブジェクト・ファイル HelloWorld_64 を生成します。
    icc -m64 -o HelloWorld_64 HelloWorld.cpp
  4. lipo ユーティリティーを使用して、オブジェクト・ファイル HelloWorld_32HelloWorld_64 からユニバーサル・バイナリー実行ファイル HelloWorld を作成します。
    lipo -create -arch i386 HelloWorld_32 -arch x86_64 HelloWorld_64 -output HelloWorld

それぞれのアーキテクチャーで正しい結果が生成されることを確認するため、ユニバーサル・バイナリーに対して file ユーティリティーを実行します。

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

コンパイラーは、インテル® 64 アーキテクチャーでのみ __x86_64__ マクロを定義します。そのため、インテル® 64 アーキテクチャー・ベースのシステムでユニバーサル・バイナリー HelloWorld を実行すると、次のような出力になります。
Hello, Intel® 64 World

IA-32 アーキテクチャー・ベースのシステムでは、次のような出力になります。

Hello, IA32 World

関連情報