如何将整个openCV库构建成静态库? 下载

问题描述

我想把整个 openCV 库构建成一个像 opencv.a 这样的文件。我正在尝试使用 .a 二进制文件与我使用 openCV 库制作的 cpp 代码链接在一起,使用 emscripten 制作单个 wasm 文件

基本上我想做的是将我制作的使用 openCV 库的 cpp 应用程序编译成 webassembly,以便我可以在浏览器中运行它。我在其他帖子中读到,这样做的方法是将 openCV 作为 .a 文件获取,然后使用 emscripten 将其与我的 cpp 代码链接

有关如何生成 .a 文件的详细说明将不胜感激。请理解,我不是 cpp 开发人员,而且我对使用编译它的构建工具一无所知。

谢谢。

解决方法

构建 OpenCV 静态库

我认为可以将整个 OpenCV 库构建为一个大型静态库。但是强烈建议为细粒度的编译构建单个和分离的静态库。 OpenCV 项目的某些部分也很难用 Emscripten 编译。如果您只想使用一组 OpenCV 函数呢?最终的 .js 或 .wasm 文件会太大。

示例 opencv-em

我们执行此脚本 opencv-em 来构建项目所需的一组静态库。它构建静态库并打包所需的包含目录。

步骤构建说明

我们已经设置了一个 shell build 脚本。我们使用 cmake 进行编译,因为 OpenCV 项目目录中存在 CMakeLists.txt,这大大简化了事情:

 cmake .. -GNinja -DCMAKE_TOOLCHAIN_FILE=$EM_TOOLCHAIN $OPENCV_CONF $OPENCV_INTRINSICS -DCMAKE_CXX_FLAGS="$EM_FLAGS" -DCMAKE_C_FLAGS="$EM_FLAGS"

我们使用 Ninja 作为编译器,但您可以使用 make。

-DCMAKE_TOOLCHAIN_FILE=$EM_TOOLCHAIN

在这种情况下定义工具链 Emscripten:

EM_TOOLCHAIN="$EMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake"

您当然需要使用 emsdk 安装 Emscripten。

OPENCV_CONF 是您定义要构建的库以及要包含和排除的必要文件的变量(这非常重要!) 另请注意,编译可能因 Emscripten 和 OpenCV 版本而异!

下载

如果您愿意,可以在发布页面下载 libs。阅读使用的 Emscripten 和 OpenCV 版本。