关于google-nacl的非常简单的问题

时间:2012-04-18 07:04:04

标签: c++ scons native-code google-nativeclient

是否正确,从胡椒18开始,我不需要scons构建系统来编译,而是使用gcc(nacl-versions)和makefile?

此外,生成的.nexe文件是否可以在任何平台的webserver上运行,而不仅仅是在它编译的平台上运行?因此,例如,本机代码模块在mac os下开发和编译,并生成32位和64位nexe文件。网络服务器我将在linux上运行该模块,并仍然会执行32位和64位版本的模块?

1 个答案:

答案 0 :(得分:9)

为Native Client构建系统

没有版本的Native Client SDK强制要求特定的构建系统;它可以随时使用SCons,GNU Make,CMake,甚至只是shell脚本。换句话说,编译器和工具 - 基于gcc和GNU工具链 - 独立于开发人员决定使用的构建系统。

然而,除了Native Client SDK的Pepper版本17之外,SDK中的示例附带了SCons的构建文件,而SCons包含在SDK中。从Pepper 18开始,不再是这种情况了。相反,为示例提供的构建文件是用于GNU Make的Makefile。

另请参阅release notes以获取SDK的Pepper 18版本。

<强>交叉编译

SDK中提供的工具目前支持32位x86和64位x86架构。 Web服务器的平台并不重要,因为Native Client模块在客户端上运行(即在浏览器中)。这意味着需要考虑两个系统:用户的系统和开发人员的系统。

在用户的系统上,当Chrome遇到页面中的Native Client模块时,它会获取适合该客户端上的浏览器的可执行文件(.nexe文件)。因此,如果64位Windows上的用户访问该页面,则将获取64位二进制文​​件;如果用户在32位Mac上,则获取32位二进制文​​件。有一些例外,我将在下面分别处理。 Chrome会根据清单文件确定32位和64位.nexes的名称。有关a description and an example of a manifest file

,请参阅Native Client SDK站点(www.GoNaCl.com)

无论用于开发的操作系统和体系结构如何,开发人员都可以 - 并且应该 - 生成32位和64位可执行文件。在Pepper 18的examples /目录中运行'make'并查看发出的命令是查看如何执行此操作的便捷方式。例如,'make hello_world_glibc'输出的一部分读取如下内容:

i686-nacl-gcc -o hello_world_x86_32.nexe hello_world.c -m32 -O0 -g -pthread -O0 -g -Wno-long-long -Wall -lppapi

i686-nacl-gcc -o hello_world_x86_64.nexe hello_world.c -m64 -O0 -g -pthread -O0 -g -Wno-long-long -Wall -lppapi

第一行产生32位.nexe;第二行产生64位.nexe。重要标志是-m32 / -m64,它指定了体系结构 - 始终构建两者,以便32位和64位计算机上的客户端都可以使用该应用程序。

从长远来看,只需要一种部署格式,ARM将作为直接支持的架构添加。有关详细信息,请参阅Portable Native Client项目。

以下是浏览器和客户端架构与32/64位的具体匹配:

  • Mac OS(32位和64位) - &gt; 32位.nexe(Chrome为32位)
  • Windows(32位) - &gt; 32位.nexe
  • Windows(64位) - &gt; 64位.nexe(Chrome是32位,但启动64位代理程序)
  • Linux(32位) - &gt; 32位.nexe
  • Linux(64位) - &gt; 32位Chrome获取32位.nexe; 64位Chrome获取64位.nexe

因此,作为一般规则,Chrome会提取与其自身位相匹配的.nexe - 除非在64位Windows上,Chrome取得64位.nexe,尽管它本身就是32位。