c++ - 交叉编译时包含外部库

标签 c++ opencv mingw cross-compiling mingw-w64

我有一个使用 OpenCV 的 C++ 项目。它在 Mac 上编译和运行正确,但我想从我的 Mac 计算机生成一个 Windows 可执行文件。我通过 Homebrew 安装了 MinGW-W64。

我有以下疑问。我如何告诉 MinGW-W64 使用 OpenCV 库来交叉编译?正如预期的那样,仅将 g++ 替换为 x86_64-w64-mingw32-g++ 是行不通的,会输出大量与未声明的 OpenCV 函数相关的错误。

我读到有必要交叉编译 OpenCV 库,但我不知道这到底是什么意思。我是否需要从本地 OpenCV 安装创建中间 *.o 文件并将它们与我自己的 C++ 代码的 *.o 文件链接以最终生成 .exe 输出?所有这些都使用 x86_64-w64-mingw32-g++ 吗?

如果是的话,我对 Make 或 CMake 等工具没有太多专业知识,但我想有一种方法可以使整个过程自动化(我的 makefile 非常简单,只需使用一个 直接从源代码生成可执行文件g++ 命令)。

有人能为我指出正确的方向吗?提前致谢!

最佳答案

是的,您需要使用 mingw 交叉编译 OpenCV,以便为 Windows 交叉编译您的项目。这意味着您将需要克隆源代码并使用 mingw 编译器完成构建说明。使用 mingw 构建 OpenCV 后,您需要在交叉编译时将项目指向使用这些库。

OpenCV 存储库使用并包含 cmake 文件来构建库。通常,cmake 用于生成 makefile,然后使用生成的 makefile 运行 make 来构建。由于您想要交叉编译,因此您需要告诉 cmake 生成适用于 mingw32-make 而不是 make 的 makefile(如 ming32-make 将使用 mingw g++ 而不是普通的 g++)。要让 cmake 生成 mingw makefile,您可以使用此 -G "MinGW Makefiles"调用它,然后使用mingw32-make` 构建。您可能想考虑使用静态链接而不是动态链接,但是如果您想要/需要使用动态链接,您需要将 opencv 构建的输出复制到 Windows 上的某个位置并将该位置添加到 PATH。

请记住,在使用 mingw 交叉编译 OpenCV 时,启用 CUDA 支持标志可能不起作用。 (我最近没有检查过,但我想我记得那是一件事)

关于c++ - 交叉编译时包含外部库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52433580/

相关文章:

c++ - 对已编译对象使用存档文件似乎会破坏编译

c++ - 从另一个 const std::map 初始化 const std::map 的一部分

visual-c++ - 从 MinGW 的 MSVC DLL 调用函数

c++ - 子类的虚函数和非虚函数的区别

python - OpenCV 3.0.0 SVM 训练模型保存/加载

c++ - HoughLine 不工作

c++ - 如何将 cv::mat header 和数据部分转换为单个 qbytearray?

c++ - curl 多接口(interface)不起作用

c - 如何使用 MINGW 运行 C 代码/文件?

c++ - 使用 C/C++ 乐观读取和锁定 STM(软件事务内存)