【问题标题】:Samples don't work in Google NaCl rev 18示例在 Google NaCl rev 18 中不起作用
【发布时间】:2014-02-06 04:27:02
【问题描述】:

我正在尝试使用最新的 Google NaCl SDK。按照https://developers.google.com/native-client/pepper18/devguide/tutorial的说明进行操作

我从他们的网站下载了 naclsdk 工具,运行更新,得到了一个 pepper_18 文件夹。

我将 NACL_SDK_ROOT 设置为 pepper_18 文件夹,进入“示例”并运行 make。一切似乎都编译得很好。

我启动了 Chrome,查看了 about: flags 和 about: plugins,并验证了 NaCl 已启用。我安装了 SDK 示例应用程序(来自:https://developers.google.com/native-client/pepper18/sdk/examples),效果很好。

然后我尝试运行本地构建和托管的示例,转到http://localhost:5301。HTML 加载正常,但 NaCl 内容不加载。在 hello world 示例中,它永远显示“状态:正在加载...”。

我仔细检查了 HTTP 服务器日志,没有发现任何错误。还有其他地方我应该寻找记录的错误吗?

【问题讨论】:

    标签: google-nativeclient


    【解决方案1】:

    检查版本不匹配

    在 Chrome 中导航到 about:version 并检查 Chrome 的主要版本是否至少是您用于构建示例的 Pepper 版本。

    检查 Chrome 中的 JavaScript 控制台是否有任何错误

    您可以通过单击 Chrome 右上角的扳手图标并选择工具 -> JavaScript 控制台来找到它。

    检查 NaCl 模块以获取更多信息

    在 JavaScript 控制台中,您还可以检查 NaCl 模块的 embed 元素。例如,如果嵌入标签有id="nacl_module",您可以通过键入来检查它

    theModule = document.getElementById('nacl_module');

    theModule.lastError;

    检查 Chrome 到 stdout/stderr 的输出

    在 Mac 或 Linux 上,从终端启动 Chrome 并查看控制台上的输出。例如,在 Mac 上,您通常会使用

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-nacl

    在 Windows 上,如果从命令提示符启动,Chrome 不会写入终端。为此,您需要通过设置环境变量 NACLLOG、NACL_EXE_STDOUT 和 NACL_EXE_STDERR 从 Chrome 重定向 stdout/stderr。将它们指向不同的文件,例如,

    NACLLOG = c:\my_project\nacl.log

    NACL_EXE_STDOUT = c:\my_project\nacl_stdout.log

    NACL_EXE_STDERR = c:\my_project\nacl_stderr.log

    然后(重新)启动 Chrome(确保这些环境变量生效)。

    连接调试器

    https://developers.google.com/native-client/pepper18/beta-docs/debugging 上提供了有关使用调试支持(目前只有 64 位 Windows 和 64 位 Linux)的说明。

    重启 Chrome 意味着关闭所有窗口

    为 Native Client 开发时,通常会重新启动 Chrome。关闭所有 Chrome 窗口很重要;否则它实际上并没有重新启动。

    【讨论】:

    • 感谢您的精彩回答!原来是与 Chrome 17 的版本不匹配。我切换到 pepper_16 并且有效。
    • @West,我看到了这个i.stack.imgur.com/l47Sg.png,但为什么document.getElementById('nacl_module'); 给出了null?
    【解决方案2】:

    我搞砸了一些问题,我会记录下来以防他们帮助别人:

    • 忽略了“制作”示例(从提问者的描述中获得了制作它们的线索)。
    • Chrome 不允许我运行非商店 chrome 应用程序。转到chrome://flags 并启用Native ClientNative Client GDB-based debugging
    • JavaScript 控制台说 .../debug/ 下的演示 nmf 文件丢失。我将 make 配置更改为基于 this 构建 Debug 而不是 Release。
    • Chrome 控制台投诉NativeClient: NaCl module load failed: ServiceRuntime: failed to start; NaCl's GDB debug stub requires --no-sandbox flag on Windows. See crbug…。尝试使用 --no-sandbox 从 cmd 运行 Chrome。这会导致警报 You are using an unsupported command-line flag: --nosandbox. Stability and security will suffer. 上述错误消失,但示例仍然无法运行 - 没有 UI。
    • 回到chrome://flags 并禁用Native Client GDB-based debugging

    然后大多数示例都有效。 Google Drive 演示抱怨Error: must be run as a packged app.

    【讨论】:

      【解决方案3】:

      您是否确认您已从示例文件夹运行 httpd.py?此脚本创建 localhost:5103 服务器,应用程序可以从该服务器运行。

      另外,您使用的是什么操作系统?

      ~主要

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-06
        • 2020-11-26
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        相关资源
        最近更新 更多