2017-05-20 150 views
0

我使用的Codeblocks 16.01與OpenCV 3.2.0-vc14安裝到C:\ opencv 編譯和鏈接搜索目錄已在CodeBlocks中設置。在CodeBlocks中使用OpenCV庫

我寫了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)) 

它是如此迷茫。有人可以幫我嗎?

回答

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編譯器在代碼:: Blocks的16.01捆綁 默認編譯器 - 並試圖鏈接 64與它的位圖書館。即使庫不是由不兼容的編譯器 生成的,也不能將64位代碼與32位代碼 鏈接。

您在32 [64]位程序中鏈接的所有庫必須使用相同的編譯器或至少一個兼容ABI的 編譯器構建,並且它們也必須是32位。

重新開始並從源代碼構建OpenCV,使用您的mingw32編譯器針對mingw,32位, 。從zip文件中獲取windows源代碼Source codethe GitHub OpenCV repo。 看起來好像您可能已經從源代碼構建。如果是這樣,那麼你 建庫的64位VC++ 14,不mingw32的,和那些庫 是無用的。

要重新構建庫並在Code :: Blocks中配置OpenCV項目, 請仔細遵循this tutorial, 。

+0

我知道了!謝謝邁克。 – okeyla