Node-gyp: библиотека C ++ только для заголовков инициализируется при импорте и компиляции разрыва - PullRequest
0 голосов
/ 03 декабря 2018

Я написал некоторую функцию в C ++ для анализа файла csv ( Используя этот синтаксический анализатор: https://github.com/AriaFallah/csv-parser) и сделал с ним некоторые вещи. Теперь я хотел использовать (почти) тот же код для NodeJS на основеКомпиляция и запуск это прекрасно работает (я использую CMakeLists для компиляции), но при попытке скомпилировать его через node-gyp (+ некоторые изменения, основанные на nan) библиотеку только для заголовков, которую я использую для csvСинтаксический анализ немедленно инициализируется и вызывает исключение из-за недопустимых потоков ввода.

#include <nan.h>
#include <iostream>
#include <stdexcept>
#include <string>
#include <cstring>
#include "csv-parser.hpp"
#include "SampleData.h"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

using namespace Nan;
using namespace v8;
using namespace aria::csv;

NAN_METHOD(ParseData) {
    std::ifstream some_stream("<path1">);
    [... lots of stuff]
}

NAN_MODULE_INIT(Initialize) {
    NAN_EXPORT(target, ParseData);
}

NODE_MODULE(addon, Initialize);

При сбое компиляции это происходит из-за этого:

make: Entering directory '/home/me/WebstormProjects/nodenative/build'
  g++ '-DNODE_GYP_MODULE_NAME=addon' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/me/.node-gyp/8.11.4/include/node -I/home/me/.node-gyp/8.11.4/src -I/home/me/.node-gyp/8.11.4/deps/openssl/config -I/home/me/.node-gyp/8.11.4/deps/openssl/openssl/include -I/home/me/.node-gyp/8.11.4/deps/uv/include -I/home/me/.node-gyp/8.11.4/deps/zlib -I/home/me/.node-gyp/8.11.4/deps/v8/include -I../node_modules/nan  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF ./Release/.deps/Release/obj.target/addon/main.o.d.raw   -c -o Release/obj.target/addon/main.o ../main.cpp


In file included from ../main.cpp:6:0:
../csv-parser.hpp: In constructor ‘aria::csv::CsvParser::CsvParser(std::istream&)’:
../csv-parser.hpp:81:84: error: exception handling disabled, use -fexceptions to enable
                     throw std::runtime_error("Something is wrong with input stream");
                                                                                    ^

Это происходит, как только включается csv-parser.hpp, даже когда не используется.

Спасибо за любые идеи!

...