2012-12-17 35 views
2

我正在使用NaCL开发Google Chrome扩展程序。这很酷很容易使用,但我有一个疑问。使用NaCL和外部库的Google Chrome扩展程序

我的扩展需要GPGME(GnuPG的一点通),所以我编译“--enable-共享”选项,库和添加库到.mnf文件:

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

我还更新使用选项“-lgpgme”的makefile,但是当我编译我的.nexe时,我有以下错误:“libgpgme.so:文件无法识别:文件格式无法识别”。

所以,我的问题是:

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

- 干杯, 何塞

回答

3

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

移植到本机客户端: 由于libgpgme使用自动工具,特别是配置,则需要通过文件config.sub的basic_machine部分添加这样的部分NaCl的平台发布给他们,这应该某处驻留在libgpgme源代码树:

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

并添加

-nacl* 

到同一个文件的操作系统部分。一个特别干净的端口的例子是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有几个移植后的mortems。特别是,关于XaoS的https://developers.google.com/native-client/community/porting/xaos有关于自动工具的简短部分。

现有端口: 此外,还有一个基于社区的Native Client存储库,称为naclports。它包含几个已经移植过的库,但不幸的是,它还没有libgpgme。您可以在http://code.google.com/p/naclports/source/browse/trunk/src/libraries/处看到naclports中的库列表。虽然它包含了如何做端口的有用示例,但naclports并不适合那些胆怯的人,因为它常常会破坏,并且 - 由于它是以志愿者/尽力而为的方式维护的 - 可能需要一些时间才能修复。

+0

好的,谢谢你的解释。我将尝试将libgpgme移植到NaCL,但这很容易,因为首先我需要移植依赖关系,比如libgpgme_error等等......但是我会尝试;) – josecampos

+0

@West 39th:你可以在这里看看我的问题http://stackoverflow.com/questions/23270979/how-to-use-ported-library-in-nacl-module。我不知道如何解决它。谢谢, –

1

您需要的端口libgpgme对NaCl第一。即libgpgme应该由NaCl编译器编译而不是Linux编译器。

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

相关问题