Добавьте каталог включения для узла gyp

Я развертываю приложение node-js на heroku, для которого требуется пакет nma imagemagic -native.

Я сделал buildpack установить libmagick++-dev и экспортируйте путь включения:

export INCLUDE_PATH="$BUILD_DIR/.apt/usr/include:$INCLUDE_PATH"
export CPATH="$INCLUDE_PATH"
export CPPPATH="$INCLUDE_PATH"

После установки imagemagic-native пакет с npm install, node-gyp вызывается для компиляции его двоичных файлов. Однако я получаю эту ошибку:

remote:        > imagemagick-native@1.7.0 install /tmp/build_720834c3a32b65d69ae603d7c618e20f/node_modules/imagemagick-native
remote:        > node-gyp rebuild
remote:        
remote:        make: Entering directory `/tmp/build_720834c3a32b65d69ae603d7c618e20f/node_modules/imagemagick-native/build'
remote:          CXX(target) Release/obj.target/imagemagick/src/imagemagick.o
remote:        In file included from ../src/imagemagick.cc:9:
remote:        ../src/imagemagick.h:1:22: warning: Magick++.h: No such file or directory

Это говорит о том, что gcc не видит файлы заголовков для libmagick++, так как $CCPATH недоступно для него.

Как я могу сделать npm install добавить путь к списку include_dirs что использует node-gyp?

Более подробно о моем случае использования здесь: Использование Magick++ в приложении node.js на heroku

4 ответа

Решение

Пытаться:

установка переменной окружения CXX=/path/to/g++ -Ipath/to/include

а затем перезапустить процесс. Если вы используете bash, это делается

export CXX="/path/to/g++ -Ipath/to/include"

В / path / to / include находится отсутствующий заголовок Magick++.h

если это не сработает, вам, возможно, придется вручную установить CXX для включения -I в make-файл по адресу /tmp/build_720834c3a32b65d69ae603d7c618e20f/node_modules/imagemagick-native/build, а затем зайти в этот каталог и вызвать make.

Я провел некоторое время, пытаясь ответить на тот же вопрос. В конце концов, я нашел правильный способ сделать это здесь. Вам нужно установить 'include_dirs' недвижимость в ~/.node-gyp/x.x.x/common.gypi, Вот как я установил каталог включения в Mac OS на /opt/local/include/ (куда идут все макпорты):

...
['OS=="mac"', {
  'defines': ['_DARWIN_USE_64_BIT_INODE=1'],
  'include_dirs': ['/opt/local/include'],
  'xcode_settings': {
    'ALWAYS_SEARCH_USER_PATHS': 'NO',
...

Хотя я не уверен, что это применимо к окружающей среде героку.

Вы также можете использовать опцию "include_dirs" в вашем файле binding.gyp вашего проекта. Подробнее о доступных опциях читайте на странице описания формата.

Теперь вы можете сделатьOTHER_CFLAGS='-I/usr/local/include'предположительно. См. https://github.com/nickdesaulniers/node-nanomsg/pull/144.

Другие вопросы по тегам