Ошибка при создании надстройки node.js с помощью node-gyp

Я создаю чрезвычайно простой аддон node.js, который просто выводит строку «Hello». Когда я собираюсь собрать его с помощью «node-gyp build», я получаю сообщение об ошибке:

gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | darwin | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/hello/hello.o
  SOLINK_MODULE(target) Release/hello.node
clang: error: no such file or directory: '“-L/opt/local/lib”'  
make: *** [Release/hello.node] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:820:12)
gyp ERR! System Darwin 13.4.0
gyp ERR! command "node" "/usr/local/bin/node-gyp" "build"
gyp ERR! cwd /Users/Kevin/Development/node/sampleaddon
gyp ERR! node -v v0.10.35
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok 

Сначала я иду и проверяю, существует ли /opt/local/lib. Он есть, и он полон файлов. Я думаю, что это, возможно, проблема с разрешениями, поэтому я запускаю «sudo node-gyp build». Это прекрасно работает, и аддон собирается без ошибок.

Так что похоже, что это связано с разрешениями. Итак, я смотрю на разрешения:

Chipmunk:sampleaddon Kevin$ ls -l /opt/local
total 8
drwxr-xr-x    3 root  wheel    102 Feb  2  2014 Library
drwxr-xr-x  344 root  admin  11696 Mar 13  2014 bin
drwxr-xr-x    7 root  admin    238 Feb  2  2014 etc
drwxr-xr-x   70 root  admin   2380 Mar 13  2014 include
drwxr-xr-x  240 root  admin   8160 Mar 13  2014 lib
drwxr-xr-x    7 root  admin    238 Feb  2  2014 libexec
lrwxr-xr-x    1 root  admin      9 Feb  2  2014 man -> share/man
drwxr-xr-x    9 root  admin    306 Feb  2  2014 sbin
drwxr-xr-x   26 root  admin    884 Feb  2  2014 share
drwxr-xr-x    3 root  admin    102 Oct 25  2013 var

У всех есть доступ для чтения к /opt/local/lib, поэтому я не понимаю, в чем здесь проблема. Я хотел бы создавать надстройки узлов, не создавая их с правами root.

Я npm установил node-gyp с параметром -g, но это обычный способ его установки.

Кто-нибудь знает, в чем проблема?

Редактировать: Вот файл binding.gyp.

{
    "targets" : [
        {
            "target_name" : "hello",
            "sources" : [ "hello.cpp" ]           
        }
    ]
}

Вот как это выглядит, когда я запускаю «sudo node-gyp build»:

Chipmunk:sampleaddon Kevin$ sudo node-gyp build
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | darwin | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/hello/hello.o
  SOLINK_MODULE(target) Release/hello.node
  SOLINK_MODULE(target) Release/hello.node: Finished
gyp info ok 

Я не знаю, имеет ли это значение, но я использую OS X 10.9.5.


person Kevin Peter    schedule 07.02.2015    source источник
comment
Можешь опубликовать свой binding.gyp?   -  person mscdex    schedule 07.02.2015
comment
Конечно. Я добавил содержимое binding.gyp.   -  person Kevin Peter    schedule 07.02.2015


Ответы (1)


Я узнал, в чем дело. «-L/opt/local/lib», с которым у node-gyp возникают проблемы, исходит из переменной среды LDFLAGS. Эта переменная среды была добавлена ​​macports. По какой-то причине node-gyp не справляется с котировками. Я отредактировал файл .bash_profile в своем домашнем каталоге и удалил цитаты вокруг -L/opt/local/lib в LDFLAGS.

Это сработало, и я смог скомпилировать надстройку node.js. Я понятия не имею, почему цитаты вызывают эту проблему. Я понятия не имею, как можно было бы указать каталог ссылок с пробелом, если в пути ссылки не разрешены кавычки. Если кто-нибудь знает, как указать путь ссылки node-gyp с пробелом в имени каталога, сообщите мне.

person Kevin Peter    schedule 17.02.2015