2017-01-07 8 views
-1

Вот мой bindings.gyp файл:г ++ ошибки построения с узлом-Gyp перестраивать для Node.js Аддон

{ 
    "targets": [ 
    { 
     "target_name": "hello", 
     "sources": [ "hello.cpp" ], 
     "include_dirs": [ 
     "<!(node -e \"require('nan')\")" 
     ], 
     "cflags" : [ "-std=c++1", "-stdlib=libc++" ], 
       "conditions": [ 
       [ "OS!='win'", { 
        "cflags+": [ "-std=c++11" ], 
        "cflags_c+": [ "-std=c++11" ], 
        "cflags_cc+": [ "-std=c++11" ], 
       }], 
       [ "OS=='mac'", { 
        "xcode_settings": { 
        "OTHER_CPLUSPLUSFLAGS" : [ "-std=c++11", "-stdlib=libc++" ], 
        "OTHER_LDFLAGS": [ "-stdlib=libc++" ], 
        "MACOSX_DEPLOYMENT_TARGET": "10.7" 
        }, 
       }], 
       ], 
    } 
    ] 
} 

при запуске

sudo node-gyp rebuild 

я получаю эти ошибки:

make: Entering directory '/home/oleg/WebstormProjects/oresoftware/replace-line/build' 
    CXX(target) Release/obj.target/hello/hello.o 
g++: error: unrecognized command line option ‘-std=c++1’ 
g++: error: unrecognized command line option ‘-stdlib=libc++’ 
hello.target.mk:106: recipe for target 'Release/obj.target/hello/hello.o' failed 

из ошибки след, кажется ясным, что мы используем g ++ не gcc, а моя версия g ++:

gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 

и да я на Ubuntu 16.04

Кто-нибудь знает, почему эта ошибка происходит?

ответ

1

У вас есть -std=c++1, это опечатка, это должно быть: -std=c++11.

Также -stdlib является опцией clang (не g ++). Для g ++ всегда используется libstdC++.

+0

ОК спасибо, но здесь мы говорим о g ++ не gcc? Я откровенно не знаю разницы – Olegzandr

+1

s/gcc/g ++/.... – mscdex