Сбой сборки узла.Не удается найти заголовочный файл библиотеки в подкаталоге включенного каталога - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу использовать библиотеку DronecodeSDK (C ++) в приложении Node.js.В настоящее время я не могу создать аддон узла, который включает заголовки DronecodeSDK.Только заголовки в подкаталогах не могут быть найдены в node-gyp.

#include <dronecode_sdk/dronecode_sdk.h> включается просто отлично, но #include <dronecode_sdk/plugins/action/action.h> нет.

Если я переместу файл action.h в dronecode_sdk/action.h, то включение будет работать нормально.Только когда он перемещен в подкаталог плагинов, он не найден.

Мой файл binding.gyp:

{
  "targets": [
    {
      "include_dirs" : [
            "<!(node -e \"require('nan')\")",
            "../lib/DronecodeSDK/install/include"
        ],
     "libraries": [ "../lib/DronecodeSDK/install/lib/libdronecode_sdk.a" ],
      "target_name": "DronecoreSDK",
      "sources": [ "DronecoreSDKBridge.cc" ]
    }
  ]
}

Два оператора включения в 'DronecodeSDKBridge.cc':

#include <dronecode_sdk/dronecode_sdk.h>
#include <dronecode_sdk/plugins/action/action.h>

Я получаю следующее сообщение об ошибке:

gyp info it worked if it ends with ok
gyp info using node-gyp@3.8.0
gyp info using node@10.15.0 | darwin | x64
gyp info spawn /usr/local/bin/python2
gyp info spawn args [ '/usr/local/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/aokholm/src/kitex/_3_GroundStation/electron-GC/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/local/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/aokholm/.node-gyp/10.15.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/aokholm/.node-gyp/10.15.0',
gyp info spawn args   '-Dnode_gyp_dir=/usr/local/lib/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/aokholm/.node-gyp/10.15.0/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/aokholm/src/kitex/_3_GroundStation/electron-GC',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/DronecoreSDK/DronecoreSDKBridge.o
../DronecoreSDKBridge.cc:10:10: fatal error: 'dronecode_sdk/plugins/action/action.h' file not found
#include <dronecode_sdk/plugins/action/action.h>
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make: *** [Release/obj.target/DronecoreSDK/DronecoreSDKBridge.o] 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:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Darwin 18.2.0
gyp ERR! command "/usr/local/bin/node" "/usr/local/bin/node-gyp" "rebuild"
gyp ERR! cwd /Users/aokholm/src/kitex/_3_GroundStation/electron-GC
gyp ERR! node -v v10.15.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 

Может ли быть так, что подкаталоги просто не работают, или ошибка где-то еще?Я проверил, что права доступа ко всем файлам заголовков доступны для чтения.

1 Ответ

0 голосов
/ 04 апреля 2019

Узлы-пути довольно загадочные.

Путь к библиотеке ../lib/DronecodeSDK/install/lib/libdronecode_sdk.a правильный. Однако путь включения ../lib/DronecodeSDK/install/include был неверным.

Причина, по которой node-gyp все равно может найти заголовок dronecode_sdk.h, заключается в том, что он по умолчанию ищет заголовки в двух каталогах самого верхнего уровня проекта.

Изменение пути включения на lib/DronecodeSDK/install/include решило проблему.

...