Solaris 64 ビット 開発ガイド

構築環境

構築環境には、システムヘッダー、コンパイルシステム、およびライブラリが含まれています。これらのことについては、次の節で説明します。

ヘッダーファイル

1 組のシステムヘッダーが 32 ビットおよび 64 ビットのコンパイル環境をサポートします。64 ビットコンパイル環境用に別のインクルードパスを指定する必要はありません。

64 ビット環境をサポートするためにヘッダーに加えられた変更をより理解するには、ヘッダーの <sys/isa_defs.h> のさまざまな定義について理解しておくことをお薦めします。このヘッダー中には #define が含まれており、それらは各命令セットアーキテクチャに対して設定されています。<sys/types.h> をインクルードすると、自動的に <sys/isa_defs.h> がインクルードされます。

次の表にあるシンボルは、コンパイル環境 (コンパイラ) によって定義されます。

シンボル 

説明 

__sparc

SPARC ファミリーのプロセッサアーキテクチャのいずれかであることを示します。アーキテクチャには、SPARC V7、SPARC V8、および SPARC V9 があります。シンボルの sparc は、非推奨の __sparc の同義語です。

__sparcv8

『The SPARC Architecture Manual, Version 8』で定義されている 32 ビット SPARC V8 アーキテクチャを示します。 

__sparcv9

『The SPARC Architecture Manual, Version 9』で定義されている 64 ビット SPARC V9 アーキテクチャを示します。 

__x86

x86 ファミリーのプロセッサアーキテクチャのいずれかであることを示します。これらのアーキテクチャには 386、486、Pentium、AMD64、および EM64T プロセッサがあります。 

__i386

32 ビット i386 アーキテクチャであることを示します。 

__amd64

64 ビット amd64 アーキテクチャであることを示します。 


注 –

__i386 および __amd64 は、相互に排他的です。シンボル __sparcv8 および __sparcv9 は相互に排他的で、シンボル __sparc が定義されているときにだけ意味があります。


次に示すシンボルは、上記のシンボルのいくつかの組み合わせから派生したものです。

シンボル 

説明 

_ILP32

intlong、およびポインタのサイズがすべて 32 ビットであるデータ型モデル

_LP64

long およびポインタのサイズがすべて 64 ビットであるデータ型モデル


注 –

シンボル _ILP32 および _LP64 も、相互に排他的です。


完全に移植性のあるコードを書くことが不可能で、32 ビットおよび 64 ビットのそれぞれに固有のコードが必要な場合は、_ILP32 または _LP64 を使って、コードを条件付きで切り替えるようにしてください。これによって、マシンに依存しないコンパイル環境にすることができ、アプリケーションをすべての 64 ビットプラットフォームに移植する際の移植性が高くなります。

コンパイラの環境

Sun Studio C、C++、および Fortran のコンパイル環境が拡張され、32 ビットおよび 64 ビットアプリケーションの両方を作成できるようになりました。Sun Studio で提供される C コンパイラのリリース 10.0 は、64 ビットコンパイルをサポートします。

ネイティブコンパイルモードおよびクロスコンパイルモードがサポートされています。デフォルトのコンパイル環境は、これまでどおり 32 ビットアプリケーションを作成します。ただし、両モードともアーキテクチャに依存します。Sun コンパイラを使用して、x86 マシン上で SPARC オブジェクトを作成したり、 SPARC マシン上で x86 オブジェクトを作成することはできません。アーキテクチャやコンパイラのモードが指定されていない場合は、適宜 __sparcv8 または __i386 シンボルがデフォルトで定義され、この一部として _ILP32 も定義されます。これによって、既存のアプリケーションおよびハードウェアにおける相互運用性が高くなります。

Sun Studio 8 リリースから、cc(1) -xarch=generic64 フラグを使用して、64 ビットコンパイル環境を使用できるようにします。

これによって LP64 コードが含まれる ELF64 オブジェクトが生成されます。ELF64 とは、64 ビットのプロセッサおよびアーキテクチャをサポートする 64 ビットオブジェクトファイル形式のことです。一方、デフォルトの 32 ビットモードでコンパイルしたときは、ELF32 オブジェクトファイルが生成されます。

-xarch=generic64 フラグを使用すると、32 ビットまたは 64 ビットのシステムで 64 ビット コードを生成できます。32 ビットコンパイラを使用すると、32 ビットシステムで 64 ビットオブジェクトを作成できますが、その 64 ビットオブジェクトは 32 ビットシステムでは実行できません。64 ビットライブラリに対するライブラリパスを指定する必要はありません。-l または -L オプションを使用してライブラリまたはライブラリパスを追加指定し、そのパスが 32 ビットライブラリだけを指している場合は、リンカーはそれを検出し、エラーを出力してリンク処理を異常終了します。

コンパイラオプションの説明は、『Sun Studio 10: C ユーザーズガイド』を参照してください。

32 ビット ライブラリと 64 ビット ライブラリ

Solaris オペレーティングシステムには、32 ビットおよび 64 ビットの両コンパイル環境用の共有ライブラリが含まれています。

32 ビットアプリケーションは 32 ビットライブラリとリンクし、64 ビットアプリケーションは 64 ビットライブラリとリンクしなければなりません。64 ビットライブラリを使って 32 ビットアプリケーションを作成または実行することはできません。32 ビットライブラリは、これまでどおり /usr/lib および /usr/ccs/lib に置かれています。64 ビットライブラリは、適切な lib ディレクトリのサブディレクトリに置かれています。32 ビットライブラリの場所は変更されていないので、Solaris 2.6 以前のオペレーティングシステムで構築された 32 ビットアプリケーションとのバイナリの互換性があります。移植可能な Make ファイルは、64 シンボリックリンクを使用してライブラリのいずれかのディレクトリを参照します。

64 ビットアプリケーションを構築するためには 64 ビットライブラリが必要です。64 ビットライブラリは、32 ビットおよび 64 ビットの両環境で利用できるため、ネイティブコンパイルもクロスコンパイルも可能です。コンパイラとその他のツール (たとえば ldaras など) は 32 ビットプログラムで、32 ビットまたは 64 ビットシステム上で 64 ビットプログラムを構築する機能があります。もちろん、32 ビットオペレーティング環境上のシステムで作成された 64 ビットプログラムは、32 ビット環境では実行できません。