gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:46:36 25 4
gpt4 key购买 nike

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

此外,生成的 .nexe 文件将在任何平台网络服务器上运行,而不仅仅是在编译它的平台上,这是否正确?所以比如在mac os下开发编译native code模块,生成32bit和64bit的nexe文件。我将加载此模块的 Web 服务器在 Linux 上运行,并且仍会执行 32 位和 64 位版本的模块?

最佳答案

为 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适用于 Pepper 18 版本的 SDK。

交叉编译

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

在用户系统上,当 Chrome 在页面中遇到 Native Client 模块时,它会获取适用于该客户端浏览器的可执行文件(.nexe 文件)。因此,如果 64 位 Windows 用户访问该页面,将获取 64 位二进制文​​件;如果用户使用的是 32 位 Mac,则获取 32 位二进制文​​件。也有异常(exception),我将在下面单独处理。 Chrome 从 list 文件中确定 32 位和 64 位 .nexe 的名称。有关 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 位)-> 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 位的。

关于c++ - 关于google-nacl的非常简单的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com