Я успешно создал надстройку 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, от которых я зависит, не компилируются.
Есть идеи, что я делаю неправильно?