2014-02-19 40 views
0

我想在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。在Windows上运行的Eclipse上的静态链接OpenCV

我的问题是,如何在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特定的。

回答

0

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

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

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

+0

我试着添加这些第三方库,如您所说,但-lopencv_lapack和-lrt未找到。顺便说一下,你有什么想法,我应该如何“正确”排列OpenCV库?我如何确定libraryA取决于libraryB? – user2900552

+0

尝试没有lapack和lrt。我没有太多想法。我尝试和测试模式来找出它 –