交叉编译时包括外部库

时间:2018-09-20 21:29:55

标签: 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非常简单,只需使用一个{{1 }}命令。

有人可以为此指出正确的方向吗?预先感谢!

1 个答案:

答案 0 :(得分:1)

是的,您将需要使用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 with mingw32-make`来调用它。您可能要考虑使用静态链接而不是动态链接,但是如果您希望/需要使用动态链接,则需要将opencv构建的输出复制到Windows上的某个位置,然后将该位置添加到PATH。

请记住,当与mingw交叉编译OpenCV时,启用CUDA支持标记可能不起作用。 (我最近没有检查过,但我想我记得是一个东西)