如何在 node-gyp 构建过程中包含 tesseract 库
How to include tesseract library in node-gyp build process
我正在尝试使用 tesseract 库作为依赖项创建简单的节点插件,但我是 C++ 初学者。
完整代码位于:https://github.com/q-nick/node-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:
{
"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 - 它是 https://cppan.org/
不幸的是,我不知道如何将它与 node-gyp 构建过程联系起来。 CPPAN 有一个名为 cppan.yml 的配置文件(类似于 npm 中的 package.json)
cppan.yml:
dependencies:
pvt.cppan.demo.google.tesseract.libtesseract: master
pvt.cppan.demo.danbloomberg.leptonica: 1
我想通过一个命令构建我的节点插件和所有依赖项(如 tesseract)。并且不知道如何在 node-gyp build
中 link c++ 依赖项
我想使用最新的 tesseract 版本,所以我不能使用预编译的库。目前,我在 Windows 环境中工作,但我希望它是一个跨平台进程。
我的示例 GitHub 项目 (https://github.com/q-nick/node-tesseract) 必须在取消注释 tesseract include 后编译成功。
如果有其他简单的方法可以完成此操作,请分享。
我想要!
解决方案是将所有 c++ tesseract 代码构建为依赖项! (和 leptonica),所以首先是尝试了解如何构建 tesseract(哪些参数、变量、定义...)
只需检查一下,例如:https://github.com/istex/popplonode/blob/master/binding.gyp
lib 文件夹中有一个 poppler 的依赖文件。
可以在这方面合作!
我会自己回答我的问题。
我找到了一个项目:https://github.com/cmake-js/cmake-js,其中有很多关于为什么要离开 gyp 的解释:
...First of all, Google, the creator of the gyp platform is moving towards its new build system called gn, which means gyp's days of support are counted...
我还发现:https://github.com/nodejs/nan/
...The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect NODE_MODULE_VERSION and get yourself into a macro-tangle...
所以我试一试。
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 文件并稍作修改。我想使用 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
现在,一切都已经设置好了,我们可以 运行 install
和 build
命令:
cppan
和
cmake-js build
祝你好运!
我正在尝试使用 tesseract 库作为依赖项创建简单的节点插件,但我是 C++ 初学者。 完整代码位于:https://github.com/q-nick/node-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:
{
"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 - 它是 https://cppan.org/
不幸的是,我不知道如何将它与 node-gyp 构建过程联系起来。 CPPAN 有一个名为 cppan.yml 的配置文件(类似于 npm 中的 package.json)
cppan.yml:
dependencies:
pvt.cppan.demo.google.tesseract.libtesseract: master
pvt.cppan.demo.danbloomberg.leptonica: 1
我想通过一个命令构建我的节点插件和所有依赖项(如 tesseract)。并且不知道如何在 node-gyp build
中 link c++ 依赖项我想使用最新的 tesseract 版本,所以我不能使用预编译的库。目前,我在 Windows 环境中工作,但我希望它是一个跨平台进程。
我的示例 GitHub 项目 (https://github.com/q-nick/node-tesseract) 必须在取消注释 tesseract include 后编译成功。
如果有其他简单的方法可以完成此操作,请分享。
我想要!
解决方案是将所有 c++ tesseract 代码构建为依赖项! (和 leptonica),所以首先是尝试了解如何构建 tesseract(哪些参数、变量、定义...) 只需检查一下,例如:https://github.com/istex/popplonode/blob/master/binding.gyp lib 文件夹中有一个 poppler 的依赖文件。
可以在这方面合作!
我会自己回答我的问题。
我找到了一个项目:https://github.com/cmake-js/cmake-js,其中有很多关于为什么要离开 gyp 的解释:
...First of all, Google, the creator of the gyp platform is moving towards its new build system called gn, which means gyp's days of support are counted...
我还发现:https://github.com/nodejs/nan/
...The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect NODE_MODULE_VERSION and get yourself into a macro-tangle...
所以我试一试。
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 文件并稍作修改。我想使用 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
现在,一切都已经设置好了,我们可以 运行 install
和 build
命令:
cppan
和
cmake-js build
祝你好运!