交叉编译时包含外部库

Include external libraries when cross-compiling

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

我的疑惑如下。我如何告诉 MinGW-W64 使用 OpenCV 库来交叉编译?正如预期的那样,仅用 x86_64-w64-mingw32-g++ 替换 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" and then build withmingw32-make 调用它。您可能想考虑使用静态链接而不是动态链接,但是如果您 want/need 使用动态链接,则需要将 opencv 构建的输出复制到 Windows 上的某个位置并将该位置添加到小路。

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