Как исправить «nan.h»: в аддоне nodejs нет такого файла или каталога?

Я пытаюсь создать надстройку 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
<nan.h> и <nan> не являются частью Standard C++, см. Заголовки стандартной библиотеки C++. Я бы посоветовал вам поднять вопрос с сопровождающими библиотеки. Возможно, вам не хватает зависимости?
Richard Critten 07.04.2024 14:50

Удалите тег «c» и добавьте командную строку, используемую для компиляции. Также есть куча кода, специфичного для ОС, какой из них на самом деле применим? Пожалуйста, предоставьте минимально воспроизводимый пример!

Ulrich Eckhardt 07.04.2024 14:57

@RichardCritten, где мне взять библиотеку <nan.h>, которая является собственной абстракцией для Node.js?

Dev M 07.04.2024 15:01
nan.h взят из сторонней библиотеки, которой у вас либо нет, либо ваш путь поиска в заголовке ее не охватывает. Имейте в виду, что компиляторы не ищут файлы, которые могут работать, во всей вашей системе — у них есть список мест поиска и возможность самостоятельно добавить дополнительные каталоги. Он найдет только файлы, на которые распространяется это ограничение.
Christian Stieber 07.04.2024 15:02

@RichardCritten nodejs уже есть https://github.com/nodejs/nan Я попробовал npm install --save nan, но это не сработало.

Dev M 07.04.2024 15:09

@DevM Если у вас уже есть файл nan.h (и вам следует проверить), то проблема просто в том, что вы не указали компилятору, где найти nan.h. Поэтому найдите nan.h, а затем измените настройки вашего проекта, чтобы включить это местоположение при поиске файлов заголовков.

john 07.04.2024 15:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я только что добавил в файлbinding.gyp это:

"include_dirs" : [
    "<!(node -e \"require('nan')\")"
]

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