OpenCV Find_Package Emscripten - WebAssembly
Posted
技术标签:
【中文标题】OpenCV Find_Package Emscripten - WebAssembly【英文标题】: 【发布时间】:2018-10-23 20:26:19 【问题描述】:我尝试将 C++ 程序编译为 WebAssembly - 它是 OpenCV C++ 库的包装器
CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project(myProject)
set(CMAKE_CXX_STANDARD 11)
find_package(OpenCV REQUIRED)
add_library(myProject STATIC myProject.cpp)
include_directories($OpenCV_INCLUDE_DIRS)
target_link_libraries(myProject $OpenCV_LIBS)
OpenCV 安装在本地,使用 (CLion IDE) 编译时可以正常工作
cmake --build /Users/marek/Documents/projects/myProject/cmake-build-debug --target all -- -j 2
但是,当我尝试用它编译时
mkdir build-wasm
cd build-wasm
cmake -DCMAKE_CROSSCOMPILING_EMULATOR="/Users/marek/emsdk/node/8.9.1_64bit/bin/node" .. -DCMAKE_TOOLCHAIN_FILE=/Users/marek/emsdk/emscripten/1.38.13/cmake/Modules/Platform/Emscripten.cmake
它会产生错误
CMake Error at CMakeLists.txt:26 (find_package):
By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "OpenCV", but CMake did not find one.
Could not find a package configuration file provided by "OpenCV" with any of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set "OpenCV_DIR" to a directory containing one of the above files. If "OpenCV" provides a separate development package or SDK, be sure it has been installed.
所以它没有找到 OpenCV
【问题讨论】:
【参考方案1】:假设您的 OpenCV 安装是为 WebAssembly 编译的:
这行意味着 CMake 要么确实安装了一些基本脚本,要么你需要指向你的 OpenCV 安装目录应该是:
由于没有在 CMAKE_MODULE_PATH 中提供“FindOpenCV.cmake”,该项目要求 CMake 查找“OpenCV”提供的包配置文件,但 CMake 没有找到。
很可能是您将 OpenCV 安装在了非标准位置。要更具体地告诉 CMake 在哪里寻找您的依赖项,请尝试 find_package
下的 HINTS
标志。
很可能发生了什么:
错误报告错误,以及对find_package
在 CMake 中的多功能性存在误解。本质上,你的 OpenCV 安装不是为 WebAssembly 编译的,所以这个库是无效的。 CMake(或某些子系统)检测到库无效,并出错。但是,该错误消息具有误导性,因为它使您看起来好像找不到 OpenCV 模块的路径。 CMake 所做的最好的报告如下:
If "OpenCV" provides a separate development package or SDK, be sure it has been installed.
编辑:
您可以从他们的custom build script 为 WebAssembly 构建 OpenCV。
【讨论】:
是的,我最终尝试了他们的脚本并且成功了,但是它生成了一个 10MB 的 js 文件。你如何才能为选定的模块而不是整个库创建绑定? @Marek 你使用他们的原始构建脚本?比如,你只是逐字逐句地运行它? 我刚刚运行了 python ./platforms/js/build_js.py build_wasm --build_wasm --enable_exception --emscripten_dir=/path/to/emcc以上是关于OpenCV Find_Package Emscripten - WebAssembly的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV + Leptonica + Tesseract 项目的 CMakeLists.txt 示例