2012-04-18 11 views
2

これは正しいですか?18それ以降は、sconsをコンパイルするためにシステムを構築する必要はありませんが、gcc(nacl-versions)とmakefilesを使用しますか?google-naclに関する非常に簡単な質問

また、生成された.nexeファイルは、コンパイルされたプラットフォームだけでなく、どのプラットフォームのWebサーバーでも実行されることが正しいですか?たとえば、ネイティブコードモジュールは、Mac OSで開発されコンパイルされ、32ビットと64ビットのnexeファイルを生成します。 Webサーバー私はこのモジュールをlinux上で実行しますが、32ビット版と64ビット版の両方でモジュールを実行しますか?ネイティブクライアントのための

答えて

9

ビルドシステム

ネイティブクライアントSDKのバージョンはありませんが、特定のビルドシステムを義務付け。 SCons、GNU Make、CMake、あるいは単にシェルスクリプトを使うことはいつでも可能です。別の言い方をすれば、gccとGNUツールチェーンに基づいたコンパイラとツールは、開発者が使用するビルドシステムとは独立しています。

しかし、Native Client SDKのPepperバージョン17まで、SDKのサンプルにはSCons用のビルドファイルが付属していましたが、SConsはSDKに含まれていました。 Pepper 18以降では、これはもはやケースではありません。代わりに、この例で提供されるビルドファイルは、GNU Makeを対象としたMakefileです。

Pepper 18バージョンのSDKについては、release notesも参照してください。 SDKで提供さ

クロスコンパイル

ツールは、現在、32ビットx86および64ビットx86アーキテクチャをサポートします。 Native Clientモジュールはクライアント(つまりブラウザ)上で動作するため、Webサーバーのプラットフォームは重要ではありません。つまり、ユーザーのシステムと開発者のシステムの2つのシステムを検討する必要があります。

ユーザーのシステムでChromeがページにNative Clientモジュールを見つけたら、そのクライアントのブラウザに適した実行可能ファイル(.nexeファイル)を取得します。したがって、64ビットWindowsのユーザーがページを訪問すると、64ビットバイナリがフェッチされます。ユーザーが32ビットMac上にある場合、32ビットバイナリがフェッチされます。例外はありますが、以下では別に扱います。 Chromeは、マニフェストファイルから32ビットおよび64ビット.nexesの名前を判別します。 a description and an example of a manifest file

については、Native Client SDKサイト(www.GoNaCl.com)を参照してください。開発者は、開発に使用するオペレーティングシステムとアーキテクチャに関係なく、32ビットと64ビットの両方の実行可能ファイルを作成できます。 Pepper 18のexamples /ディレクトリにある '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(クロムが32ビットであります)
  • のWindows(32ビット) - > 32ビット.nexe
  • のWindows(64ビット) - > 64ビット.nexe(クロムが32ビットであるが、64ビット・ブローカ処理を開始する)
  • Linux(32ビット) - > 32ビット.nexe
  • Linux(64ビット) - > 32ビットChromeは32ビットの.nexeをフェッチします。 64ビットChromeは64ビットの.nexeをフェッチします

したがって、Chromeは独自のビットタイムと一致する.nexeをフェッチします。ただし、Chromeが64ビットの.nexeをフェッチする64ビットWindowsは例外です32ビット自体です。

+0

詳細情報をありがとうございます。ちょうど確かめるために:mac osでコンパイルされたnexeファイル(32または64bitであろうと)は、linuxとwindows上のブラウザでも動作しますか? – user826955

+0

正しくコンパイルされたシステムに関係なく、サポートされているすべてのオペレーティングシステム(Mac、Linux、Windows、およびChrome OS)で.nexe(32ビットまたは64ビット)を使用できます。別の言い方をすると、現在サポートされているすべてのオペレーティングシステムとアーキテクチャをカバーするために、32ビットと64ビットの2つの.nexをコンパイルするだけです。 ポータブルネイティブクライアントでは、1つのファイル(.pexe)のみをコンパイルする必要があります。これは、すべてのオペレーティングシステムとアーキテクチャ(x86-32、x86-64、およびARM) –

+0

に感謝します:) – user826955

関連する問題