2017-12-07 8 views
2

依存関係としてtesseractライブラリを持つ単純なノードアドオンを作成しようとしていますが、私はC++の初心者です。 https://github.com/q-nick/node-tesseractnode-gypビルドプロセスにtesseractライブラリを含めるには

binding.cc:

#include <node.h> 
#include <v8.h> 
// #include <tesseract/baseapi.h> 
// #include <leptonica/allheaders.h> 

void Method(const v8::FunctionCallbackInfo<v8::Value>& args) { 
    v8::Isolate* isolate = args.GetIsolate(); 
    args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, "world")); 
} 

void init(v8::Local<v8::Object> exports) { 
    NODE_SET_METHOD(exports, "hello", Method); 
} 

NODE_MODULE(NODE_GYP_MODULE_NAME, init) 

がbinding.gyp: - それはhttps://cppan.org/

{ 
    "targets": [ 
    { 
     "target_name": "binding", 
     "sources": [ 
     "src/binding.cc" 
     ], 
     'defines': [ 'V8_DEPRECATION_WARNINGS=1' ], 
     'include_dirs': [ 
     ], 
     'libraries': [ 
     # '-lpvt.cppan.demo.google.tesseract.libtesseract', 
     # '-lleptonica' 
     ] 
    } 
    ] 
} 

私はたTesseract、leptonicaのような依存関係をコンパイルする私を助けることができるプロジェクトを見つけた時 コード全体

残念ながら、これをnode-gypビルドプロセスとどのように接続するかはわかりません。私は私のノードアドオンやたTesseractなどのすべての依存関係を(構築したい

dependencies: 
    pvt.cppan.demo.google.tesseract.libtesseract: master 
    pvt.cppan.demo.danbloomberg.leptonica: 1 

:CPPANは1つの設定は、それがcppan.yml(NPMでpackage.jsonのようなもの)

cppan.ymlという名前のファイルました)を1つのコマンドで実行します。また、ノードコンパイルのC++依存関係をリンクする方法がわからない

最新のtesseractバージョンを使用したいので、コンパイル済みのライブラリを使用できません。現在、私はWindows環境で作業していますが、クロスプラットフォームプロセスにしたいと考えています。

私の例GitHubプロジェクト(https://github.com/q-nick/node-tesseract)は、tesseractインクルードのコメントを外してから正常にコンパイルする必要があります。

これ以外の簡単な方法がある場合は、これを実現する方法を教えてください。

答えて

0

私は自分で質問に答えます。 https://github.com/cmake-js/cmake-js GYPから離れる理由について多くの説明があります:

は私がプロジェクトを見つけ

...まず第一に、グーグルと呼ばれる同社の新しいビルドシステムに向けて動いているGYPプラットフォームの作成者...サポートのGYPの日数がカウントされていることを意味する、GN

私も見つかりましたhttps://github.com/nodejs/nan/

...このプロジェクトの目標は、SにありますNODE_MODULE_VERSIONを調べることなくネイティブのNode.jsアドオンを開発するために必要なすべてのロジックを捨てて、マクロに絡み合ってください...

私はそれを試してみましょう。

binding.cc:

#include <nan.h> 
#include <baseapi.h> 
#include <allheaders.h> 

NAN_MODULE_INIT(InitAll) { 
    Set(target, New<String>("myMethod").ToLocalChecked(), 
    GetFunction(New<FunctionTemplate>(MyMethod)).ToLocalChecked()); 
} 

NODE_MODULE(addon, InitAll) 

NAN_METHOD(MyMethod) { 
    info.GetReturnValue().Set(Nan::New<v8::String>("world").ToLocalChecked()); 
} 

次のものは、いくつかの修正とCMakeLists.txtファイルを作成することです。私は、依存関係のinstallatorとしてcppan使用したいので、私はCMAkeLists.txtファイルをデフォルトにいくつかの余分な行を追加する必要があります。

add_subdirectory(.cppan) 
... 
target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB} 
    pvt.cppan.demo.google.tesseract.libtesseract 
    pvt.cppan.demo.danbloomberg.leptonica 
) 

CMakeLists.txt:

project(addon) 

file(GLOB SOURCE_FILES "src/**/*.cc" "src/**/*.h") 
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES}) 

add_subdirectory(.cppan) 

set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") 

target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) 

target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB} 
    pvt.cppan.demo.google.tesseract.libtesseract 
    pvt.cppan.demo.danbloomberg.leptonica 
) 

cppan.yml

dependencies: 
    pvt.cppan.demo.google.tesseract.libtesseract: master 
    pvt.cppan.demo.danbloomberg.leptonica: 1 

これですべてが既に設定されており、installbuildコマンドを実行できます:

cppan 

cmake-js build 

幸運!

+0

&これはあなたのために.nodeを構築していますか? すべてのC++ソースを追加すると、node.js用のスタンドアロンの実行可能ファイルを作成するのはすばらしくすべきです – nodeover

0

私はしたい!

解決策はすべてのC++ tesseractコードを依存関係として構築することです!最初に、tesseract(どの引数、変数、...を定義する)を構築するかを知ることを試みることです https://github.com/istex/popplonode/blob/master/binding.gyp libフォルダ内のpopplerへの依存ファイルがあります。

これで一緒に動作する可能性があります。

+0

私は解決策を見つけました。受け入れられた答えを見てください。 –

関連する問題