【问题标题】:Very simple questions about google-nacl关于google-nacl的非常简单的问题
【发布时间】:2012-04-18 07:04:04
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    为 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 位 .nex 的名称。请参阅 Native Client SDK 站点 (www.GoNaCl.com) 获取 a description and an example of a manifest file

    开发人员可以并且应该生成 32 位和 64 位可执行文件,而不管用于开发的操作系统和体系结构如何。在 Pepper 18 的示例/目录中运行“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 位。

    【讨论】:

    • 感谢您提供详细信息。只是为了确保:在 mac os 上编译的 nexe 文件(无论是 32 位还是 64 位)仍然可以在 linux 和 windows 上的浏览​​器中运行?
    • 正确,.nexe(无论是 32 位还是 64 位)都可以在所有受支持的操作系统(Mac、Linux、Windows 和 Chrome OS)上运行,无论它是在什么系统上编译的。换句话说,要涵盖所有当前支持的操作系统和架构,您只需要编译两个 .nex:一个 32 位和一个 64 位。使用 Portable Native Client,您只需要编译一个文件(一个 .pexe),这将适用于所有操作系统和架构(x86-32、x86-64 和 ARM)
    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 2021-07-25
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多