【问题标题】:Compiling native node addon with c++ 17 inside fails during npm install on ubuntu在 ubuntu 上安装 npm 期间,使用 c++ 17 编译本机节点插件失败
【发布时间】:2017-08-15 05:42:16
【问题描述】:

我有使用 c++17 功能的 nodejs 的本机插件,特别是“shared_mutex”。 当我调用下载和编译插件的 npm install 时,我收到一个错误:

linux机器安装了GCC 6.0。

我的 Binding.gyp 使用以下配置来捕获操作系统类型并相应地添加标志:

     'conditions': [
        ['OS=="linux"', {
            'CXXFLAGS': [
                '-std=c++1z'
            ]}],

** 我也尝试过使用 '-std=c++17'、'-std=c++1z'。

我错过了什么?

更新: 1. 将 ubuntu 16.04 更新为 GCC 16.04 并设为默认。 2.似乎当我尝试使用 node-gyp rebuild "CXXFLAGS='-std=c++17'" 手动编译它时,它可以工作并且只带来一个错误: “命名空间std中的shared_,utex没有命名一个类型std::shared_mutex文件mutex”(最后一个错误)

【问题讨论】:

  • 首先,c++1y 是 14 而不是 17,17 是 1z。其次,尝试使用 cxxflags 而不是 cflags。
  • 你看到-std=c++1y 在编译时传递给gcc。 gcc 命令将在错误消息上方
  • shared_mutex 在 6.1 中添加。 (请注意,C++17 标准尚未完成。编译器支持是不可预测的。)
  • 更新到 CXXFLAGS="-std=c++1z" - 仍然没有通过标志。
  • 我已将 GCC 更新到 6.3,但仍然无法使用相同的错误。但是当我手动“node-gyp rebuild CXXFLAGS=-std=c++17”时,它似乎部分起作用了

标签: c++ node.js gcc c++17


【解决方案1】:

问题解决了。对于遇到相同问题的任何人,bind.gyp 应该使用 cflags_cc 而不是 cxxflags。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多