2

NaCL を使用して Google Chrome 拡張機能を開発しています。かっこよくて使いやすいのですが、ちょっと疑問です。

私の拡張機能には GPGME (GnuPG Made Easy) が必要なので、そのライブラリを「--enable-shared」オプションでコンパイルし、ライブラリを .mnf ファイルに追加しました。

{
    ...
    "files": {
        "libgpgme.so": {
            "x86-64": {
                "url": "libs/libgpgme.so"
            },
            "x86-32": {
                "url": "libs/libgpgme.so"
        }
    }
    ...
}

オプション「-lgpgme」を使用してメイクファイルも更新しますが、.nexe をコンパイルすると、「libgpgme.so: ファイルが認識されません: ファイル形式が認識されません」というエラーが表示されます。

だから、私の質問は次のとおりです。

  1. プロジェクトで外部ライブラリを使用できますか?
  2. これどうやってするの?

-- 乾杯、ホセ

4

2 に答える 2

3

Native CLIent の内部サンドボックスはバイナリの検証に依存しているため、Native Client ツールを使用して libgpgme をコンパイルする必要があります。一般に、Native Client は、コードが静的にリンクされているか動的にリンクされているかに関係なく、ライブラリを含め、コードを実行する前に検証する必要があります。検証可能なバイナリを作成する最も簡単な方法は、Native Client コンパイラを使用することです。

ネイティブ クライアントへの移植: libgpgme は autotools を使用し、特に configure を使用するため、config.sub ファイルの basic_machine 部分に次のようなセクションを追加して、NaCl プラットフォームをそれらにアドバタイズする必要があります。ソースツリー:

   nacl*)
           basic_machine=i686-pc
           os=-nacl
           ;;

と追加

  -nacl*

同じファイルの os セクションに。特にクリーンなポートの例は libogg です。パッチ全体はhttp://code.google.com/p/naclports/source/browse/trunk/src/libraries/libogg-1.1.4/nacl-libogg-1.1.4.patchで確認できます。(厳密に言えば、config.sub は configure.in から生成されますが、多くの場合、config.sub を編集する方が適切です。)

移植にはこの最初のステップよりも多くの作業があるため、既存の移植へのいくつかのガイドとポインターに従って、移植がどのように行われたかを感じてください。

ガイド: 詳細については、https: //developers.google.com/native-client/community/developers にいくつかの移植事後分析があります。特に、https: //developers.google.com/native-client/community/porting/xaos の XaoS に関するものには、autotools に関する短いセクションがあります。

既存のポート: また、naclports と呼ばれるネイティブ クライアント用のコミュニティ ベースのリポジトリがあります。すでに移植されたライブラリがいくつか含まれていますが、残念ながら libgpgme はまだ移植されていません。http://code.google.com/p/naclports/source/browse/trunk/src/libraries/で、naclports のライブラリのリストを確認できます。ポートの実行方法の有用な例が含まれていますが、naclports はしばしば壊れてしまうため、気弱な人向けではありません。また、ボランティア/ベストエフォート ベースで維持されているため、修正に時間がかかる場合があります。

于 2012-12-18T11:44:59.553 に答える
1

最初に libgpgme を NaCl に移植する必要があります。つまり、libgpgme は Linux コンパイラではなく NaCl コンパイラでコンパイルする必要があります。

GPGME は configure を使用します。そのため、移植は通常、ラッピング スクリプトをコンパイラとして渡すことによって行われます。これらのスクリプトは、NaCl コンパイラによって生成された NaCl プログラムを、sel_ldr を介して呼び出すスクリプトに置き換えます。このようにして、configure はコンパイルされた NaCl プログラムを通常の Linux プログラムとして実行できます。

于 2012-12-17T20:03:05.663 に答える