Собственная ошибка компиляции надстройки в функции NODE_MODULE на 12.0.0, работает на 11.15.0 - PullRequest
0 голосов
/ 13 мая 2019

Я поддерживаю пакет aerospike, клиентский SDK для базы данных Aerospike No-SQL.На версиях Node.js вплоть до версии 11.15.0 включительно этот пакет компилируется и работает нормально.Но, начиная с версии 12.0.0, я получаю ошибку времени компиляции при сборке нативной надстройки, которую я не могу устранить.

Ошибка возникает в этой функции (слегка сокращенно):

void Aerospike(Handle<Object> exports, Handle<Object> module)
{
    AerospikeClient::Init();
    export("client", Nan::New<FunctionTemplate>(client)->GetFunction());
        // more exports
}

NODE_MODULE(aerospike, Aerospike)

И ошибка, которую я получаю:

  CXX(target) Release/obj.target/aerospike/src/main/aerospike.o
../src/main/aerospike.cc:102:6: error: variable has incomplete type 'void'
void Aerospike(Handle<Object> exports, Handle<Object> module)
     ^
../src/main/aerospike.cc:102:23: error: 'Object' does not refer to a value
void Aerospike(Handle<Object> exports, Handle<Object> module)
                      ^
/Users/jhecking/.node-gyp/12.0.0/include/node/v8.h:3356:17: note: declared here
class V8_EXPORT Object : public Value {
                ^
../src/main/aerospike.cc:102:16: error: use of undeclared identifier 'Handle'
void Aerospike(Handle<Object> exports, Handle<Object> module)
               ^
../src/main/aerospike.cc:102:31: error: use of undeclared identifier 'exports'
void Aerospike(Handle<Object> exports, Handle<Object> module)
                              ^
../src/main/aerospike.cc:102:47: error: 'Object' does not refer to a value
void Aerospike(Handle<Object> exports, Handle<Object> module)
                                              ^
/Users/jhecking/.node-gyp/12.0.0/include/node/v8.h:3356:17: note: declared here
class V8_EXPORT Object : public Value {
                ^
../src/main/aerospike.cc:102:40: error: use of undeclared identifier 'Handle'
void Aerospike(Handle<Object> exports, Handle<Object> module)
                                       ^
../src/main/aerospike.cc:102:55: error: use of undeclared identifier 'module'
void Aerospike(Handle<Object> exports, Handle<Object> module)
                                                      ^
../src/main/aerospike.cc:102:62: error: expected ';' after top level declarator
void Aerospike(Handle<Object> exports, Handle<Object> module)
                                                             ^
                                                             ;
8 errors generated.

Модуль использует более старый API расширения C ++, а не n-api.Я использую последнюю версию nan v2.13.2.

Ошибка также видна в этом задании Travis CI: https://travis -ci.org / aerospike / aerospike-client-nodejs / jobs/523788617.

Полный исходный код находится здесь: https://github.com/aerospike/aerospike-client-nodejs/blob/2b9554d1158abda58c17cfbd0438d78f0212ef9e/src/main/aerospike.cc#L102

1 Ответ

0 голосов
/ 06 июня 2019

Правильная подпись для второго аргумента NODE_MODULE: void InitializerFunction(Local<Object> exports[, Local<Value> module]) ( ref ).Handle было удалено из v8;это замена Local.

Если вы не переходите на N-API, NAN - хороший способ избежать этих изменений.

...