NaCl如何在以下情景中发挥作用

时间:2013-11-13 11:09:45

标签: c++ cross-platform google-nativeclient

我有一个用于屏幕共享的NPAPI插件。

为此,我使用zlib,jpeg,tight-vnc库以及由我开发的库(比如libX)。

现在我希望将它移植到NaCl。

libX的结构如下:

                     /X/commonfiles

                     /X/win/*.cpp *.h

                     /X/linux/*.cpp *.h

                     /X/mac/*.cpp *.h *.mm

这些目录包含特定于平台的cpp文件。

我根据平台使用makefile编译它们。

但我无法理解NaCl工具链如何从我的库/代码生成一个nexe或pexe。

是否有我们必须考虑的makefile或我遗失的任何其他东西。

请帮助!

感谢!!!

1 个答案:

答案 0 :(得分:0)

首先,NaCl是一种沙盒技术,可在浏览器中运行本机代码时提供安全性。因此,您将无法直接访问用户的文件系统(就像您可以使用NPAPI插件一样)。您可能需要修改库以支持NaCl作为新的“操作系统”。

也就是说,Pepper Plugin API (PPAPI)提供了许多功能,允许你的NaCl插件与浏览器通信。此外,NaCl SDK附带的nacl_io库提供了更为熟悉的POSIX类接口,以支持文件I / O和套接字。

使用pnacl工具链尝试构建库不应该太难,如下所示:

  1. 下载Native Client SDK。完成后,您应该有一个名为pepper_31的目录,其中包含Native Client SDK。

  2. Native Client构建可能与您的Linux端口最相似。在您的makefile中,更改执行本机工具链的任何构建规则,以改为使用pnacl工具链,例如。

    • g++ => pepper_31/toolchain/linux_pnacl/bin/pnacl-clang++
    • ar => pepper_31/toolchain/linux_pnacl/bin/pnacl-ar
  3. 尝试构建Linux版本。您可能会有一些编译失败,可能来自缺少的库,可能来自标头差异。根据您的库的功能,您可能需要修改它以使用PPAPI来访问图形,套接字,URL请求,文件IO等内容。

  4. 执行此操作后,您可能会遇到有关如何实施所需功能的更具体问题。 :)