node-gyp Node.js addon, использующий node-addon-api, не переопределяет версию c ++ в linux - PullRequest
0 голосов
/ 18 сентября 2019

Я успешно создал надстройку c ++ для node.js в Mac OS.Пытаюсь портировать на Linux (Centos7).

Я использую node.js версии 12.10, node-gyp версии 5.0.3, node-addon-api версии 1.7.1.Centos версия 7.6.1810, gcc версия 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)

Мой binding.gyp:

{
  "targets": [
    {
      "target_name": "hsm",
      ### The sources list must be relative to the current directory.
      "sources": [ "../../../my_project/src/mypackage/binding-napi.cpp" ],
      "include_dirs": [
        # this is for using n-api vs nan
        "<!@(node -p \"require('node-addon-api').include\")"
      ],
      'dependencies': ["<!(node -p \"require('node-addon-api').gyp\")"],
      "cflags_cc": [
        "-fexceptions",
      ],
      "conditions": [
        ['OS=="linux"', {
           "cflags_cc": [
             "-std=c++17"
           ]
        }],
      ],
      'xcode_settings': {
        'MACOSX_DEPLOYMENT_TARGET':
          '10.14',
        'CLANG_CXX_LANGUAGE_STANDARD':
          'c++17',
        'GCC_ENABLE_CPP_EXCEPTIONS':
          'YES',
          # 'gnu++1z'
        'OTHER_CFLAGS': [
          "-fcxx-exceptions",
          '-Wno-unused-result'
        ]
      }
    }
  ]
}

Я попытался добавить вcflags_cc, как в глобальном пространстве, так и в условиях.Если я сделаю оба, он добавит его в командную строку g ++ дважды.

Вот результирующие флаги на g ++

... fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 
-fno-omit-frame-pointer 
-fno-rtti 
-fno-exceptions 
-std=gnu++1y 
-fexceptions 
-std=c++17 ...

Я пробовал оба -std=c++17 и -std=c++1z.файл common.gypi имеет следующие связанные значения:

...
      [ 'OS in "linux freebsd openbsd solaris android aix cloudabi"', {
        'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ],
        'cflags_cc': [ '-fno-rtti', '-fno-exceptions', '-std=gnu++1y' ],
...

Я видел много постов, в которых говорится, что я использую cflags_cc, и я только добавляю его, а не заменяю, и поэтомуВозможности c ++ 17, от которых я зависит, не компилируются.

Есть идеи, что я делаю неправильно?

1 Ответ

0 голосов
/ 20 сентября 2019

Это решено.Добавление стандарта c ++ в командной строке gcc работает - он подчиняется последнему.Проблема, с которой я столкнулся, заключалась в том, что пользовательская библиотека (ы) c ++, которая была (была) извлекалась - каким-то образом заголовок <iomanip> не был включен, поэтому, как только я включил в свой файл binding.cpp, компиляция работала.

...