我正在使用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:文件无法识别:文件格式无法识别”。
所以,我的问题是:
- 干杯, 何
答案 0 :(得分:3)
由于Native CLient的内部沙箱依赖于二进制文件的验证,因此需要使用Native Client工具编译libgpgme。通常,Native Client需要在执行任何代码之前验证它们,包括任何库,无论它们是静态链接还是动态链接。到目前为止,创建可以验证的二进制文件的最简单方法是使用Native Client编译器。
移植到Native Client: 由于libgpgme使用autotools,特别是配置,你需要通过在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有几个移植验尸。特别是关于XaoS https://developers.google.com/native-client/community/porting/xaos的一个关于自动工具的简短部分。
现有端口: 此外,还有一个名为naclports的Native Client基于社区的存储库。它包含几个已经移植过的库,但遗憾的是还没有libgpgme。您可以在http://code.google.com/p/naclports/source/browse/trunk/src/libraries/的naclports中查看库列表。虽然它包含了如何进行端口的有用示例,但是naclports并不适合胆小的人,因为它经常会被打破,并且 - 由于它是在志愿者/尽力而为的基础上维护的 - 可能需要时间来修复。
答案 1 :(得分:1)
您需要先将libgpgme移植到NaCl。即libgpgme应该由NaCl编译器编译而不是Linux编译器。
GPGME使用configure。因此移植通常通过将包装脚本作为编译器传递来完成。这些脚本将NaCl编译器生成的NaCl程序替换为通过sel_ldr调用它们的脚本。这样configure就可以将已编译的NaCl程序作为普通的Linux程序运行。