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

时间:2014-02-19 17:08:50

标签: c++ windows eclipse opencv

我正在尝试在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。

这种方式似乎仍然使用“动态链接”,所以我尝试在Miscellaneous选项中添加-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到Linker我做了但问题仍然存在。然后我听说添加了Vfw32.Lib comctl32.lib解决了这个问题但不幸的是我猜它们是VS特有的。

1 个答案:

答案 0 :(得分:0)

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

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

如果libraryA取决于libraryB,则必须在定义libraryA之前定义libraryB