在 Windows 上运行的 Eclipse 上静态链接 OpenCV

Posted

技术标签:

【中文标题】在 Windows 上运行的 Eclipse 上静态链接 OpenCV【英文标题】:Static linking OpenCV on Eclipse running on Windows 【发布时间】:2014-02-19 17:08:49 【问题描述】:

我正在尝试在 Windows 上静态链接 OpenCV 库。我已经用BUILD_SHARED_LIBSOFF 构建了库,并在 Eclipse 上创建了一个项目(顺便说一下,我正在使用 MinGW)。 C:\opencv 设置为我的源,而C:\opencv\build\x86\mingw 设置为 cmake-gui 上的目标。然后我在C:\opencv\build\x86\mingw 上执行了mingw32-make 和mingw32-make install。

我的问题是,如何在 Eclipse 上静态链接这些库,我尝试了几种方法,但我的 OpenCV 应用程序仍然无法在未安装 OpenCV 的计算机上运行。

这是我到目前为止尝试过的,我设置了

C:\opencv\build\x86\mingw\install\include 作为包含文件夹;

C:\opencv\build\x86\mingw\lib 作为“链接器”上的库路径,我有 opencv_core246、opencv_highgui246、opencv_objdetect246 和 opencv_imgproc246。

这样看起来它仍然使用“动态链接”,所以我尝试在杂项选项上添加 -static,但随后出现以下错误:

C:\opencv\build\x86\mingw\lib\libopencv_imgproc246.a(templmatch.cpp.obj):templmatch.cpp:
(.text$_ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0x1ce5): 
undefined reference to `cv::dft(cv::_InputArray const&, cv::_OutputArray const&, int, int)'

C:\opencv\build\x86\mingw\lib\libopencv_imgproc246.a(templmatch.cpp.obj):templmatch.cpp:
(.text$_ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0x1dab):
undefined reference to `cv::mulSpectrums(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, int, bool)'

C:\opencv\build\x86\mingw\lib\libopencv_imgproc246.a(templmatch.cpp.obj):templmatch.cpp:
(.text$_ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0x1ded):
undefined reference to `cv::dft(cv::_InputArray const&, cv::_OutputArray const&, int, int)'

collect2: ld returned 1 exit status

任何人都可以为我提供使用 Eclipse 和 MinGW 在 Windows 上静态链接 OpenCV 库的真正步骤吗?

编辑:我发现在 VS 中我们必须添加库,例如: libtiff.lib libpng.lib libjpeg.lib libjasper.lib IlmImf.lib zlib.lib 到我所做的链接器,但问题仍然存在。然后我听说添加 Vfw32.Lib comctl32.lib 解决了这个问题,但不幸的是我猜它们是特定于 VS 的。

【问题讨论】:

【参考方案1】:

添加 3rd 方库 -llibjasper -llibtiff -lopencv_lapack -lzlib -lpng -ljpeg -lpthread -lrt 应该可以解决问题。

尝试编译一个非常基本的 OpenCV 代码。链接静态库时,链接的库的顺序很重要。

如果libraryA 依赖于libraryB,则必须在定义libraryB 之前定义libraryA

【讨论】:

我尝试按照您所说的添加那些第 3 方库,但未找到 -lopencv_lapack 和 -lrt。顺便说一句,你有什么想法我应该如何以正确的顺序“安排”OpenCV 库?如何确定 libraryA 依赖于 libraryB? 尝试不使用 lapack 和 lrt。我没有太多想法。我做了一个尝试和测试模式来找出它

以上是关于在 Windows 上运行的 Eclipse 上静态链接 OpenCV的主要内容,如果未能解决你的问题,请参考以下文章

windows10上Eclipse运行MapReduce wordcount程序遇到的坑

我应该从 Windows 主机虚拟化哪个 Linux 发行版来运行 Eclipse?

使用eclipse连接远程hadoop服务器

在 Windows 上使用 Eclipse 安装 OpenCV 3.0.0

如何在64位windows7上同时使用32位和64位的Eclipse

在 Windows 上设置 Eclipse C++ 编译器而不自动安装或更改系统路径