【问题标题】:How to build the whole openCV library into a static library?如何将整个 openCV 库构建成静态库?
【发布时间】:2021-04-23 19:26:45
【问题描述】:

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

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

非常感谢您详细说明如何生成 .a 文件。请理解,我不是 cpp 开发人员,我对使用编译它的构建工具一无所知。

谢谢。

【问题讨论】:

标签: c++ opencv static-libraries webassembly emscripten


【解决方案1】:

构建 OpenCV 静态库

我认为可以将整个 OpenCV 库构建为一个大的静态库。但强烈建议构建单个和分离的静态库以进行细粒度的编译。使用 Emscripten 编译的 OpenCV 项目的某些部分也很难构建。如果你只想使用一组 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 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多