2017-05-20 4 views
0

Ich verwende Codeblocks 16.01 mit OpenCV 3.2.0-vc14, die nach C: \ opencv installiert wird Die Compile und Link Search-Verzeichnis wird bereits in CodeBlocks festgelegt.Verwenden Sie OpenCV-Bibliothek in CodeBlocks

Ich schrieb ein OpenCV Beispiel, und es gibt einen Konflikt, wie folgend:

-------------- 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)) 

Es ist so verwirrt. Könnte mir jemand helfen?

Antwort

0

Sie versuchen, Bibliotheken zu verknüpfen, z.

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

die , die Sie bauen mit einem anderen C++ Compiler, nämlich mingw32-g++ mit dem MS Visual Studio 2014 C++ Compiler in einem Programm erstellt wurde.

Das wird nicht funktionieren. Bibliotheken, die von einem C++ - Compiler erstellt wurden, sind im Allgemeinen binär inkompatibel mit Programmen oder Bibliotheken, die mit einem anderen erstellt wurden, und insbesondere mit einem MS C++ - Compiler gebauter Code binär inkompatibel mit Code, der von einem GCC-Compiler erstellt wurde (den Sie verwenden) .

Darüber hinaus scheint es, dass Sie bauen ein 32-Bit-Programm mit mingw32-g++ - da die 32-Bit-TDM-GCC-Compiler die gebündelte Standard-Compiler in Code :: Blocks 16.01 ist - und versuchen, 64 zu verbinden -Bit Bibliotheken damit. Selbst wenn die Bibliotheken nicht von einem inkompatiblen Compiler erstellt wurden, können Sie keinen 64-Bit-Code mit 32-Bit-Code verknüpfen.

Alle Bibliotheken, die Sie verknüpfen in Ihrem 32 [64] -Bit Programm muss wurden mit dem gleichen Compiler oder zumindest ein binäres ABI kompatibel Compiler gebaut, und sie müssen auch sein 32 [64] -Bit.

Starten Sie erneut und erstellen Sie OpenCV aus der Quelle für das Targeting von Mingw, 32-Bit, mithilfe Ihres Mingw32-Compilers. Holen Sie sich die Windows-Quelle im Zip-Archiv Source code von the GitHub OpenCV repo. Es scheint, als ob Sie bereits aus der Quelle gebaut haben. Wenn ja, dann haben Sie die Bibliotheken für 64-Bit VC++ 14, nicht Mingw32, und diese Bibliotheken sind nutzlos.

Um die Bibliotheken erneut zu erstellen und ein OpenCV-Projekt in Code :: Blocks zu konfigurieren, folgen Sie bitte , sorgfältig.

+0

Ich habe es! Danke Mike. – okeyla