在 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_LIBS
OFF
构建了库,并在 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?
在 Windows 上使用 Eclipse 安装 OpenCV 3.0.0