2017-05-20 2 views
0

C : \ opencv 에 설치된 OpenCV 3.2.0-vc14와 함께 Codeblocks 16.01을 사용하고 있습니다. 컴파일 및 링크 검색 디렉토리는 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

라이브러리를 연결하려고합니다. 예 : 는 MS 비주얼 스튜디오 2014 다른 C와 ++ 컴파일러, 즉 mingw32-g++을 구축하고 프로그램 에서 C++ 컴파일러를 내장 한

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

.

그건 작동하지 않습니다. 하나의 C++ 컴파일러로 작성된 라이브러리는 일반적으로 다른 으로 빌드 된 프로그램 또는 라이브러리와 호환되지 않는 바이너리이고 특히 MS C++ 컴파일러로 작성된 코드는 바이너리 (사용중인 GCC 컴파일러로 작성된 코드와 호환되지 않음)입니다. .

또한, 당신이 mingw32-g++와 32 비트 프로그램 을 구축하는 것 같다 - 32 비트 TDM의 GCC 컴파일러는 코드 :: 블록 16.01에서 번들 기본 컴파일러이기 때문에 - 그리고 (64)을 연결하려고합니다 그것과 함께 비트 라이브러리. 비록 라이브러리가 호환되지 않는 컴파일러 인 으로 만들어지지 않았더라도 64 비트 코드를 32 비트 코드와 연결할 수 없습니다.

32 [64] 비트 프로그램에서 링크하는 모든 라이브러리는 동일한 컴파일러 또는 최소한 바이너리 ABI 호환 컴파일러로 빌드해야하며 32 [64] 비트 여야합니다.

다시 시작하고 mingw32 컴파일러를 사용하여 mingw, 32 비트, 을 대상으로 OpenCV를 소스에서 빌드하십시오. zip 보관함에서 Windows 소스를 가져옵니다. Source code the GitHub OpenCV repo. 이미 소스에서 빌드 한 것처럼 보입니다. 그렇다면 은 mingw32가 아닌 64 비트 VC++ 14 용 라이브러리를 구축했으며 해당 라이브러리 은 쓸모가 없습니다.

라이브러리를 다시 빌드하고 Code :: Blocks에서 OpenCV 프로젝트를 구성하려면 this tutorial, 을 신중하게 따라야합니다.

+0

알겠습니다. 마이크 고마워. – okeyla

관련 문제