1

我正在使用 Microsoft Visual Studio 2017 在 Windows 10 上构建 64 位 nss 3.39。它失败并出现以下错误:

error C4235: nonstandard extension used : '__asm' keyword not supported on this architecture

有没有人遇到过这个问题?需要解决这个问题。

我遵循的步骤:

  1. 安装了 Visual Studio 2017(企业试用版),如 Firefox 构建的 Windows 先决条件中所述。
  2. 安装锈。
  3. 安装 MozillaBuild,从 MozillaBuild 包下载。
  4. 从http://ftp.mozilla.org/pub/security/nss/releases/NSS_3_39_RTM/下载了 3.39 版的 NSS 包 (nss-3.39-with-nspr-4.20.tar.gz)
  5. 创建了一个目录 C:\src 将 nss 提取到 c:/src(这看起来像 C:/src/nss-3.39)
  6. 运行 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat
  7. 运行 C:\mozilla-build\start-shell.bat
  8. 设置MOZ_NO_RESET_PATH=1为不会覆盖 PATH 变量。
  9. 创建了所需的环境变量,

    export OS_TARGET=WIN95
    export BUILD_OPT=1
    export HOME="/c/src"
    
  10. cd ~(带我进入我的主目录)。

  11. 现在cd进入 nss-3.5\nss Build usingmake nss_build_all

现在有了这些选项:USE_64=1 BUILD_OPT=1 make nss_build_all我收到以下错误:

gtest/include/gtest/internal/gtest-port.h(999): error C2220: warning treated as error - no 'object' file generated... [some build messages]...
make[2]: *** [WIN954.0_x86_64_64_OPT.OBJ/gtest/src/gtest-all.obj] Error 2
make[2]: Leaving directory /c/src/nss-3.39/nss/gtests/google_test'
make[1]: *** [libs] Error 2
make[1]: Leaving directory /c/src/nss-3.39/nss/gtests'
make: *** [libs] Error 2
4

1 回答 1

0

安装 CYGWIN 并禁用“gtests”对我有用。要禁用 GTest,请设置NSS_DISABLE_GTESTS=1

以下是一些故障排除:

  1. 如果由于缺少某些库和包含而出现以下错误,请从 C:\mozilla-build\start-shell.bat 中删除两个变量(基本上,您不应使用空值初始化它们,以便它可以获取所需的库来自 Windows)

    SET INCLUDE=
    SET LIB=
    

    错误示例:

    c:\src\nss-3.39\nss\cpputil\databuffer.h(10): fatal error C1083: Cannot open include file: 'algorithm': No such file or directory
    make[1]: *** [WINNT6.2_x86_64_64_OPT.OBJ/databuffer.obj] Error 2
    make[1]: Leaving directory `/c/src/nss-3.39/nss/cpputil'
    make: *** [libs] Error 2
    

    从第 8 步开始重新执行步骤。

  2. 如果您的构建由于汇编代码/汇编关键字而失败,请安装一些汇编编译器(我已经安装了 CYGWIN)并添加到您的路径或在 C:\mozilla-build\start-shell.bat 中设置 CYGWIN 变量值。

    错误示例:

    error C4235: nonstandard extension used : '__asm' keyword not supported on this architecture
    

    发生这种情况是因为 64 位开发中的内联汇编不是 VS2017 支持的方案。

  3. NSS 3.39 正在使用 gtest 1.7,它会抛出 TR1 deprecation 警告。这可能导致构建失败。如果您看到如下错误,则通过禁用“gtests”,您可以成功编译 NSS。为此,在开始构建集之前NSS_DISABLE_GTESTS=1

    错误示例:

    gtest/include/gtest/internal/gtest-port.h(999): error C2220: warning treated as error - no 'object' file generated
    gtest/include/gtest/internal/gtest-port.h(999): warning C4996: 'std::tr1': warning STL4002: The non-Standard std::tr1 namespace and TR1-only machinery are deprecated and will be REMOVED. You can define _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING to acknowledge that you have received this warning
    

    尽管此问题已在 Mozilla 构建系统项目中得到修复,但它并未反映在 NSS 中。我认为,NSS 需要更新才能使用 gtest 1.8。

以下是我在使用 VS2017 的 Windows 10(64 位)上成功构建 NSSv3.39(使用 NSPR)所遵循的步骤。

  1. 安装了 Visual Studio 2017(企业试用版),如 Firefox 构建的 Windows 先决条件中所述。
  2. 安装
  3. 安装 MozillaBuild,从MozillaBuild Package下载。
  4. 安装CYGWIN
  5. 下载 3.39 版的 NSS 包 (nss-3.39-with-nspr-4.20.tar.gz)
  6. 创建了一个目录C:\src
  7. 提取 nss 到c:/src(这看起来像 C:/src/nss-3.39)
  8. 跑过

    C:\Program Files (x86)\Microsoft Visual
    Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat
    
  9. C:\mozilla-build\start-shell.bat

  10. 设置MOZ_NO_RESET_PATH=1为不会覆盖 PATH 变量。
  11. 创建了所需的环境变量,

    export OS_TARGET=WINNT
    export USE_64=1
    export BUILD_OPT=1
    export NSS_DISABLE_GTESTS=1
    export HOME="/c/src"
    
  12. cd ~ (带入主目录)。

  13. 现在 cd 进入 nss-3.5\nss
  14. 使用构建 make nss_build_all
于 2018-10-10T18:00:52.147 回答