Я пытаюсь создать надстройку BluetoothSerialPort nodejs.
Я импортировал DeviceINQ.h в файл BluetoothSerialPort.cc.
При использовании npm install для установки дополнения Node.js я получил эту ошибку:
DeviceINQ.h(17,10): фатальная ошибка C1083: невозможно просмотреть документ include: 'nan.h': такого файла или каталога нет. [C:\Users\user1\OneDrive\Documents\bluetoothNodeJS\build\BluetoothSerialPort.vcxproj]
проблема с этой строкой:
#include <nan.h>
Код DeviceINQ.h:
#ifndef NODE_BTSP_SRC_DEVICE_INQ_H
#define NODE_BTSP_SRC_DEVICE_INQ_H
#include <node.h>
#include <uv.h>
#include <nan.h>
#ifdef __APPLE__
#import <Foundation/NSArray.h>
#endif
struct bt_device {
char address[19];
char name[248];
};
#ifndef __APPLE__
struct bt_inquiry {
int num_rsp;
bt_device *devices;
};
#endif
class DeviceINQ : public Nan::ObjectWrap {
private:
#ifdef _WIN32
bool initialized;
bool GetInitializedProperty() {
return initialized;
}
#endif
public:
#ifdef _WIN32
__declspec(property(get = GetInitializedProperty)) bool Initialized;
#endif
static void Init(v8::Local<v8::Object> exports);
static void EIO_SdpSearch(uv_work_t *req);
static void EIO_AfterSdpSearch(uv_work_t *req);
#ifdef __APPLE__
static NSArray *doInquire();
#else
static bt_inquiry doInquire();
#endif
private:
struct sdp_baton_t {
DeviceINQ *inquire;
uv_work_t request;
Nan::Callback* cb;
int channelID;
char address[40];
};
DeviceINQ();
~DeviceINQ();
static NAN_METHOD(New);
static NAN_METHOD(Inquire);
static NAN_METHOD(InquireSync);
static NAN_METHOD(SdpSearch);
static NAN_METHOD(ListPairedDevices);
};
#endif
Удалите тег «c» и добавьте командную строку, используемую для компиляции. Также есть куча кода, специфичного для ОС, какой из них на самом деле применим? Пожалуйста, предоставьте минимально воспроизводимый пример!
@RichardCritten, где мне взять библиотеку <nan.h>, которая является собственной абстракцией для Node.js?
nan.h
взят из сторонней библиотеки, которой у вас либо нет, либо ваш путь поиска в заголовке ее не охватывает. Имейте в виду, что компиляторы не ищут файлы, которые могут работать, во всей вашей системе — у них есть список мест поиска и возможность самостоятельно добавить дополнительные каталоги. Он найдет только файлы, на которые распространяется это ограничение.
@RichardCritten nodejs уже есть https://github.com/nodejs/nan
Я попробовал npm install --save nan, но это не сработало.
@DevM Если у вас уже есть файл nan.h (и вам следует проверить), то проблема просто в том, что вы не указали компилятору, где найти nan.h. Поэтому найдите nan.h, а затем измените настройки вашего проекта, чтобы включить это местоположение при поиске файлов заголовков.
Я только что добавил в файлbinding.gyp это:
"include_dirs" : [
"<!(node -e \"require('nan')\")"
]
<nan.h>
и<nan>
не являются частью Standard C++, см. Заголовки стандартной библиотеки C++. Я бы посоветовал вам поднять вопрос с сопровождающими библиотеки. Возможно, вам не хватает зависимости?