0

我有一个用于屏幕共享的 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 或我缺少的任何其他东西。

请帮忙!

谢谢!!!

4

1 回答 1

0

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

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

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

  1. 下载本机客户端 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 等内容。

完成此操作后,您可能会对如何实现所需的功能有一些更具体的问题。:)

于 2013-11-14T22:49:05.560 回答