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

use*_*955 2 c++ scons native-code google-nativeclient

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

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

Wes*_*9th 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.

另请参阅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的名称.有关说明和清单文件的示例,请参阅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
Run Code Online (Sandbox Code Playgroud)

i686-nacl-gcc -o hello_world_x86_64.nexe hello_world.c -m64 -O0 -g -pthread -O0 -g -Wno-long-long -Wall -lppapi
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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