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 示例

CMakeList.txt里添加OpenCV, Eigen, Ceres, G2O库

OpenCV cmake错误

OpenCV 静态库 CMAKE 文件

Clion中的CMAKE配置OpenCv

CMake:无法设置变量以使用 OpenCV 关闭