是否正确,从胡椒18开始,我不需要scons构建系统来编译,而是使用gcc(nacl-versions)和makefile?
此外,生成的.nexe文件是否可以在任何平台的webserver上运行,而不仅仅是在它编译的平台上运行?因此,例如,本机代码模块在mac os下开发和编译,并生成32位和64位nexe文件。网络服务器我将在linux上运行该模块,并仍然会执行32位和64位版本的模块?
答案 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位的具体匹配:
因此,作为一般规则,Chrome会提取与其自身位相匹配的.nexe - 除非在64位Windows上,Chrome取得64位.nexe,尽管它本身就是32位。