Google chrome extension 使用NaCL和外部库的googlechrome扩展

Google chrome extension 使用NaCL和外部库的googlechrome扩展,google-chrome-extension,google-nativeclient,Google Chrome Extension,Google Nativeclient,我正在使用NaCL开发一个Google Chrome扩展。它很酷,也很容易使用,但我有一个疑问 我的扩展需要GPGME(GnuPG简化),因此我使用“--enable shared”选项编译该库,并将该库添加到.mnf文件中: { ... "files": { "libgpgme.so": { "x86-64": { "url": "libs/libgpgme.so" },

我正在使用NaCL开发一个Google Chrome扩展。它很酷,也很容易使用,但我有一个疑问

我的扩展需要GPGME(GnuPG简化),因此我使用“--enable shared”选项编译该库,并将该库添加到.mnf文件中:

{
    ...
    "files": {
        "libgpgme.so": {
            "x86-64": {
                "url": "libs/libgpgme.so"
            },
            "x86-32": {
                "url": "libs/libgpgme.so"
        }
    }
    ...
}
我还使用选项'-lgpgme'更新makefile,但是当我编译我的.nexe时,我有以下错误:“libgpgme.so:file not recognized:file format not recognized”

因此,我的问题是:

  • 我可以在项目中使用外部库吗
  • 我该怎么做
  • -- 干杯
    José

    您需要首先将libgpgme移植到NaCl。也就是说,libgpgme应该由NaCl编译器而不是Linux编译器编译


    GPGME使用configure。因此,移植通常通过将包装脚本作为编译器传递来完成。这些脚本用一个通过sel_ldr调用它们的脚本替换NaCl编译器生成的NaCl程序。通过这种方式,configure可以像普通Linux程序一样运行已编译的NaCl程序。

    您需要首先将libgpgme移植到NaCl。也就是说,libgpgme应该由NaCl编译器而不是Linux编译器编译


    GPGME使用configure。因此,移植通常通过将包装脚本作为编译器传递来完成。这些脚本用一个通过sel_ldr调用它们的脚本替换NaCl编译器生成的NaCl程序。通过这种方式,configure可以像普通Linux程序一样运行已编译的NaCl程序。

    因为本机客户端的内部沙箱依赖于二进制文件的验证,所以需要使用本机客户端工具编译libgpgme。通常,本机客户机需要在执行任何代码之前对其进行验证,包括任何库,无论它们是静态链接的还是动态链接的。到目前为止,创建可验证的二进制文件的最简单方法是使用本机客户端编译器

    移植到本机客户端: 由于libgpgme使用自动工具,特别是configure,您需要通过在config.sub文件的basic_machine部分中添加一个类似的部分来向他们宣传NaCl平台,该部分应该位于libgpgme源代码树的某个地方:

       nacl*)
               basic_machine=i686-pc
               os=-nacl
               ;;
    
    及加入

      -nacl*
    
    到同一文件的os部分。libogg就是一个特别干净的端口。您可以在上看到整个修补程序。(严格来说,config.sub是从configure.in生成的,但编辑config.sub通常更方便。)

    移植不仅仅是第一步,所以下面是一些指向现有端口的指南和指针,让您了解如何完成移植

    指南: 有关更多信息,请参阅下面的几个移植验尸报告。特别是,关于XaoS at的那篇文章有一小段是关于自动工具的

    现有端口:
    此外,还有一个基于社区的本地客户端存储库,名为naclports。它包含几个已经移植的库,但不幸的是还没有libgpgme。您可以在naclports中查看库的列表。虽然它包含了一些关于如何进行端口的有用示例,但naclports并不适合胆小的人,因为它经常会出现故障,而且由于它是在自愿/尽最大努力的基础上维护的,所以可能需要时间来修复。

    因为本机客户端的内部沙箱依赖于二进制文件的验证,所以需要使用本机客户端工具编译libgpgme。通常,本机客户机需要在执行任何代码之前对其进行验证,包括任何库,无论它们是静态链接的还是动态链接的。到目前为止,创建可验证的二进制文件的最简单方法是使用本机客户端编译器

    移植到本机客户端: 由于libgpgme使用自动工具,特别是configure,您需要通过在config.sub文件的basic_machine部分中添加一个类似的部分来向他们宣传NaCl平台,该部分应该位于libgpgme源代码树的某个地方:

       nacl*)
               basic_machine=i686-pc
               os=-nacl
               ;;
    
    及加入

      -nacl*
    
    到同一文件的os部分。libogg就是一个特别干净的端口。您可以在上看到整个修补程序。(严格来说,config.sub是从configure.in生成的,但编辑config.sub通常更方便。)

    移植不仅仅是第一步,所以下面是一些指向现有端口的指南和指针,让您了解如何完成移植

    指南: 有关更多信息,请参阅下面的几个移植验尸报告。特别是,关于XaoS at的那篇文章有一小段是关于自动工具的

    现有端口:
    此外,还有一个基于社区的本地客户端存储库,名为naclports。它包含几个已经移植的库,但不幸的是还没有libgpgme。您可以在naclports中查看库的列表。虽然它包含了一些关于如何进行端口的有用示例,但naclports不适合胆小的人,因为它经常会出现故障,而且由于它是在志愿者/尽最大努力的基础上维护的,可能需要时间来修复。

    好的,谢谢您的解释。我将尝试将libgpgme移植到NaCL,但这很容易,因为首先我需要移植依赖项,比如libgpgme_错误等等。。。但我会试试;)@韦斯特39:你能看看我的问题吗。我还不知道怎么解决它。谢谢,好的,谢谢你的解释。我将尝试将libgpgme移植到NaCL,但这很容易,因为首先我需要移植依赖项,比如libgpgme_错误等等。。。但我会试试;)@韦斯特39:你能看看我的问题吗。我还不知道怎么解决它。谢谢