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

How to build the whole openCV library into a static library?

我想将整个 openCV 库构建到一个文件中,如 opencv.a。我正在尝试将 .a 二进制文件 link 与我制作的使用 openCV 库的 cpp 代码一起使用,使用 emscripten 制作单个 wasm 文件。

基本上我想做的是将我制作的使用 openCV 库的 cpp 应用程序编译到 webassembly 中,以便我可以 运行 在浏览器中使用它。我在其他帖子上读到,这样做的方法是将 openCV 作为 .a 文件获取,然后 link 使用 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 版本。