Solaris 64 ビット 開発ガイド

付録 B よく尋ねられる質問 (FAQ)

32 ビットバージョンと 64 ビットバージョンのどちらのオペレーティングシステムが動作しているかは、どのようにしたらわかりますか?

isainfo -v コマンドを使用すると、オペレーティングシステムが実行できるアプリケーションを調べることができます。詳細は、isainfo(1) のマニュアルページを参照してください。

32 ビットのハードウェア上で 64 ビットのオペレーティングシステムを実行できますか?

できません。64 ビットオペレーティングシステムを 32 ビットハードウェア上で実行することはできません。64 ビットオペレーティングシステムには、64 ビットの MMU と CPU ハードウェアが必要です。

32 ビットアプリケーションを 32 ビットオペレーティング環境のシステム上で実行する場合、アプリケーションを変更する必要がありますか?

いいえ。32 ビットオペレーティング環境のシステム上でのみアプリケーションを実行する予定ならば、変更も再コンパイルも不要です。

32 ビットアプリケーションを 64 ビットオペレーティング環境のシステム上で実行する場合、アプリケーションを変更する必要がありますか?

ほとんどのアプリケーションは、コード変更も再コンパイルもせずに 32 ビットのまま、64 ビットオペレーティング環境のシステム上で従来どおり実行することができます。64 ビット機能を必要としない 32 ビットアプリケーションは 32 ビットのままにしておくと、移植性を保つことができます。

libkvm() を使用しているアプリケーションを 64 ビットオペレーティング環境のシステムで実行するには、アプリケーションを 64 ビットとして再コンパイルする必要があります。また、アプリケーションが /proc を使用している場合も、64 ビットとして再コンパイルする必要があります。これは、プロセスを記述している既存のインタフェースとデータ構造体が 64 ビット量を格納できる程大きくないので、64 ビットプロセスを認識できないからです。

64 ビット機能を利用するにはどんなプログラムを起動する必要がありますか?

特に 64 ビット機能を起動するためのプログラムはありません。64 ビットオペレーティング環境上のシステムの 64 ビット機能を利用するためには、C コンパイラまたはアセンブラの -xarch=v9 オプションを使用してアプリケーションを再構築する必要があります。

64 ビットオペレーティング環境のシステム上で 32 ビットアプリケーションを構築できますか?

できます。ネイティブコンパイルモードおよびクロスコンパイルモードがサポートされています。実行しているオペレーティングシステムが 32 ビットと 64 ビットのどちらであるかとは無関係に、デフォルトのコンパイルモードは 32 ビットです。

32 ビットオペレーティング環境のシステム上で 64 ビットアプリケーションを構築できますか?

できます。ただし 64 ビットライブラリパッケージがインストールされている必要があります。また、32 ビットオペレーティン環境のシステム上では、64 ビットアプリケーションを実行することはできません。

アプリケーションを構築しリンクするときに 32 ビットライブラリと 64 ビットライブラリを組み合わせて使うことはできますか?

できません。32 ビットアプリケーションは 32 ビットライブラリとリンクし、64 ビットアプリケーションは 64 ビットライブラリとリンクしなければなりません。異なるバージョンのライブラリと一緒に構築あるいはリンクしようとすると、エラーになります。

64 ビット実装上の浮動小数点データ型のサイズは?

32 ビットと 64 ビットとでサイズが変更されたデータ型は longポインタのみです。表 4-1 を参照してください。

time_t のサイズはどうですか ?

time_t 型は long のままです。64 ビット環境では、これは 64 ビット量に拡張されます。したがって、64 ビットアプリケーションは、2000 年および 2038 年問題に関して安全です。

64 ビット libc() では sys_errlist[]sys_nerr はどうなりましたか?

これらのシンボルは 64 ビットアプリケーションには見えません。ただし、32 ビットバイナリとの互換性を保つために、これらのシンボルは 32 ビットの libc() に残されています。

過去においては、公式に文書に記載されていない sys_errlist[] を使用して、アプリケーションはシステムが返した errno 値を印字可能な文字列に変換してきました。公式文書に記載されていないこのインタフェースを使用すると、互換性の問題が発生し、将来拡張された Solaris オペレーティングシステムを使用する際に制約が発生してしまいます。

このような問題を回避するには、32 ビットおよび 64 ビットアプリケーションの両方について、文書化されている標準 API の strerror(3C) を使用してください。また strerror() には、自動的に現在のロケールの文字列を返すという利点もあります。

malloc(3C) はなぜ 2G バイトを超える値を返さないのですか?

アプリケーションのデータセグメントのサイズを制御する資源のデフォルトのソフト制限値は、2G バイトです。アプリケーションがこれ以上の空間を割り当てる必要がある場合は、シェルを使ってこの制限値を大きくするか、あるいは制限値をなくすことができます。csh の場合は、次のコマンドを使用します。


% limit datasize unlimited

sh または ksh の場合は、次のコマンドを使用します。


$ ulimit -d unlimited

64 ビットの libc.a はどこにありますか?

64 ビットのアーカイブライブラリは提供されていません。

64 ビット Solaris オペレーティング環境を実行中のマシンでは uname(1) の出力値はどのようになりますか?

UltraSPARC での uname -p コマンドの出力は変更されていません。つまり、sparc と出力されます。

64 ビットの XViewTM アプリケーションまたは OLIT アプリケーションを作成することはできますか?

できません。32 ビット環境において古いライブラリである XView または OLIT のライブラリは 64 ビット環境に対応していません。

/usr/bin/sparcv9/lsls の 64 ビット版があるのはなぜですか?

通常の処理では 64 ビット版の ls は必要ありません。ただし、32 ビット版の ls が認識するには大きすぎるファイルシステムオブジェクトを /tmp/proc に作成できるため、64 ビット版の ls はユーザーに役立つ情報を追加します。