在CodeBlocks中使用OpenCV库

时间:2017-05-20 02:42:16

标签: c++ opencv codeblocks

我正在使用Codeblocks 16.01和OpenCV 3.2.0-vc14,它安装在C:\ opencv 编译和链接搜索目录已在CodeBlocks中设置。

我写了一个openCV示例,并且存在以下冲突:

-------------- Build: Debug in try_opencv (compiler: openCL)---------------

mingw32-g++.exe -L"C:\Program Files (x86)\Intel\OpenCL_SDK\6.3\lib\x86" -LC:\opencv\build\x64\vc14\lib -LC:\opencv\build\x64\vc14\bin -o bin\Debug\try_opencv.exe obj\Debug\main.o  -lOpenCL  C:\opencv\build\x64\vc14\lib\opencv_world320.lib C:\opencv\build\x64\vc14\lib\opencv_world320d.lib
obj\Debug\main.o: In function `main':
D:/TheOpenCLProgrammingBook/image_process_test/try_opencv/main.cpp:9: undefined reference to `cv::imread(cv::String const&, int)'
D:/TheOpenCLProgrammingBook/image_process_test/try_opencv/main.cpp:10: undefined reference to `cv::namedWindow(cv::String const&, int)'
D:/TheOpenCLProgrammingBook/image_process_test/try_opencv/main.cpp:11: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
D:/TheOpenCLProgrammingBook/image_process_test/try_opencv/main.cpp:12: undefined reference to `cv::waitKey(int)'
obj\Debug\main.o: In function `ZN2cv6StringC1EPKc':
C:/opencv/build/include/opencv2/core/cvstd.hpp:622: undefined reference to `cv::String::allocate(unsigned int)'
obj\Debug\main.o: In function `ZN2cv6StringD1Ev':
C:/opencv/build/include/opencv2/core/cvstd.hpp:664: undefined reference to `cv::String::deallocate()'
obj\Debug\main.o: In function `ZN2cv3MatD1Ev':
C:/opencv/build/include/opencv2/core/mat.inl.hpp:592: undefined reference to `cv::fastFree(void*)'
obj\Debug\main.o: In function `ZN2cv3MataSERKS0_':
C:/opencv/build/include/opencv2/core/mat.inl.hpp:613: undefined reference to `cv::Mat::copySize(cv::Mat const&)'
obj\Debug\main.o: In function `ZN2cv3Mat7releaseEv':
C:/opencv/build/include/opencv2/core/mat.inl.hpp:704: undefined reference to `cv::Mat::deallocate()'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
10 error(s), 0 warning(s) (0 minute(s), 0 second(s))

太混乱了。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您正在尝试链接库,例如

C:\opencv\build\x64\vc14\lib\opencv_world320.lib

是在程序中使用MS Visual Studio 2014 C ++编译器构建的 您正在使用不同的C ++编译器构建,即mingw32-g++

那不行。一般来说,由一个C ++编译器构建的库 二进制文件与使用不同的程序或库构建不兼容 一个,特别是,使用MS C ++编译器构建的代码是二进制的 与GCC编译器(您正在使用)构建的代码不兼容。

此外,您似乎正在构建一个32位程序 与mingw32-g++ - 因为32位TDM GCC编译器是捆绑的 Code :: Blocks 16.01中的默认编译器 - 并且正在尝试链接 带有64位库。即使图书馆不是由图书馆制作的 一个不兼容的编译器,你不能将64位代码与32位链接 代码。

您在32 [64]位程序中链接的所有库都必须 已使用相同的编译器或至少兼容的二进制ABI构建 编译器,它们也必须是32 [64]位。

再次启动并从源代码构建OpenCV,用于定位mingw,32位, 使用你的mingw32编译器。获取zip存档Source code 中的Windows源代码 来自the GitHub OpenCV repo。 好像你可能已经从源代码构建了。如果是的话,那么你 构建了64位VC ++ 14的库,而不是mingw32和那些库 没用了。

再次构建库并在Code :: Blocks中配置OpenCV项目, 关注this tutorial, 小心。