2

ペッパー18以降、コンパイルするためにsconsビルドシステムは必要なく、gcc(nacl-versions)とmakefileを使用するのは正しいですか?

また、生成された .nexe ファイルは、コンパイルされたプラットフォームだけでなく、どのプラットフォームの Web サーバーでも実行されるというのは正しいですか? たとえば、ネイティブ コード モジュールは mac os で開発およびコンパイルされ、32 ビットおよび 64 ビットの nexe ファイルが生成されます。このモジュールをロードする Web サーバーは Linux で実行されますが、32 ビット バージョンと 64 ビット バージョンの両方でモジュールを実行しますか?

4

1 に答える 1

9

ネイティブ クライアント向けのビルド システム

Native Client SDK のどのバージョンも、特定のビルド システムを必須としません。SCons、GNU Make、CMake、または単にシェル スクリプトを使用することはいつでも可能です。別の言い方をすれば、gcc と GNU ツールチェーンに基づくコンパイラとツールは、開発者が使用することを決定したビルド システムから独立しています。

ただし、ネイティブ クライアント SDK の Pepper バージョン 17 までは、SDK のサンプルには SCons のビルド ファイルが付属しており、SCons は SDK に含まれていました。Pepper 18 以降では、これは当てはまりません。代わりに、サンプル用に提供されているビルド ファイルは、GNU Make 用の Makefile です。

Pepper 18 バージョンの SDKのリリース ノートも参照してください。

クロスコンパイル

SDK で提供されるツールは現在、32 ビット x86 および 64 ビット x86 アーキテクチャをサポートしています。Native Client モジュールはクライアント上 (つまり、ブラウザー内) で実行されるため、Web サーバーのプラットフォームは重要ではありません。これは、ユーザーのシステムと開発者のシステムという 2 つのシステムを考慮する必要があることを意味します。

ユーザーのシステムでは、Chrome がページ内でネイティブ クライアント モジュールを検出すると、そのクライアントのブラウザーに適した実行可能ファイル (.nexe ファイル) をフェッチします。したがって、64 ビット Windows のユーザーがページにアクセスすると、64 ビット バイナリが取得されます。ユーザーが 32 ビット Mac を使用している場合は、32 ビット バイナリが取得されます。例外もありますが、以下で個別に扱います。Chrome は、マニフェスト ファイルから 32 ビットおよび 64 ビットの .nex の名前を決定します。マニフェスト ファイルの説明と例については、Native Client SDK サイト (www.GoNaCl.com) を参照してください。

開発者は、開発に使用するオペレーティング システムやアーキテクチャに関係なく、32 ビットと 64 ビットの両方の実行可能ファイルを作成できます (作成する必要があります)。Pepper 18 の examples/ ディレクトリで「make」を実行し、発行されたコマンドを調べると、これを行う方法を確認するのに便利な方法です。たとえば、「make hello_world_glibc」の出力の一部は次のようになります。

i686-nacl-gcc -o hello_world_x86_32.nexe hello_world.c -m32 -O0 -g -pthread -O0 -g -Wno-long-long -Wall -lppapi

i686-nacl-gcc -o hello_world_x86_64.nexe hello_world.c -m64 -O0 -g -pthread -O0 -g -Wno-long-long -Wall -lppapi

最初の行は 32 ビットの .nexe を生成します。2 行目は 64 ビットの .nexe を生成します。重要なフラグは、アーキテクチャを指定する -m32/-m64 です。常に両方をビルドして、32 ビット マシンと 64 ビット マシンの両方のクライアントがアプリを使用できるようにします。

長期的には、展開形式は 1 つだけで済み、ARM は直接サポートされるアーキテクチャとして追加されます。詳細については、Portable Native Clientプロジェクトを参照してください。

32/64 ビットに対するブラウザとクライアントのアーキテクチャの特定の一致を次に示します。

  • Mac OS (32 ビットおよび 64 ビット) -> 32 ビット .nexe (Chrome は 32 ビット)
  • Windows (32 ビット) -> 32 ビット .nexe
  • Windows (64 ビット) -> 64 ビット .nexe (Chrome は 32 ビットですが、64 ビットのブローカー プロセスを開始します)
  • Linux (32 ビット) -> 32 ビット .nexe
  • Linux (64 ビット) -> 32 ビット Chrome は 32 ビットの .nexe をフェッチします。64 ビット Chrome は 64 ビット .nexe をフェッチします

したがって、一般的なルールとして、Chrome は自身のビット年齢に一致する .nexe を取得します。ただし、Chrome 自体が 32 ビットであるにもかかわらず 64 ビットの .nexe を取得する 64 ビット Windows を除きます。

于 2012-04-18T19:15:52.473 に答える