【问题标题】:Google Chrome Extension using NaCL with an external library使用 NaCL 和外部库的 Google Chrome 扩展
【发布时间】:2012-12-17 19:39:26
【问题描述】:

我正在使用 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' 更新了 makefile,但是当我编译我的 .nexe 时,出现以下错误:“libgpgme.so:文件无法识别:文件格式无法识别”。

所以,我的问题是:

  1. 我可以在我的项目中使用外部库吗?
  2. 我该怎么做?

-- 干杯, 何塞

【问题讨论】:

    标签: google-chrome-extension google-nativeclient


    【解决方案1】:

    由于 Native CLient 的内部沙箱依赖于二进制文件的验证,因此您需要使用 Native Client 工具编译 libgpgme。一般来说,Native Client 需要在执行之前验证任何代码,包括任何库,无论它们是静态链接还是动态链接。到目前为止,创建可验证的二进制文件的最简单方法是使用 Native Client 编译器。

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

       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 的简短部分。

    现有端口: 此外,还有一个基于社区的 Native Client 存储库,称为 naclports。它包含几个已经被移植的库,但不幸的是还没有 libgpgme。您可以在http://code.google.com/p/naclports/source/browse/trunk/src/libraries/ 看到 naclports 中的库列表。虽然它包含有关如何进行移植的有用示例,但 naclports 不适合胆小的人,因为它经常中断,并且 - 鉴于它是在自愿/尽力而为的基础上维护的 - 可能需要时间来修复。

    【讨论】:

    • 好的,谢谢您的解释。我将尝试将 libgpgme 移植到 NaCL,但这很容易,因为首先我需要移植依赖项,例如 libgpgme_error 等...但我会尝试 ;)
    • @West 39th:你能在这里看看我的问题stackoverflow.com/questions/23270979/…。我还不知道怎么解决。谢谢,
    【解决方案2】:

    您需要先将 libgpgme 移植到 NaCl。 IE。 libgpgme 应该由 NaCl 编译器而不是 Linux 编译器编译。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2016-03-16
      相关资源
      最近更新 更多