Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How can I link the opencv libraries correctly?

I would like to work with the pre-built version of the opencv libraries in qt creator with either cmake or qmake in windows.

I have already tried various tutorials and asked colleagues at university without much success. However maybe someone sees, what could be wrong and how to fix it. I would be extremely happy, if someone could help me: I updated and use the latest versions qt creator, mingw, cmake and opencv. In "C:/myPath/C++/opencv/opencv/build/x64/vc15/lib" lie the files: "opencv_world341.lib" and "opencv_world341d.lib", they are each about the size: 2.2MB.

I have the CMake File:

cmake_minimum_required(VERSION 2.8)
project(OpenCV_CMake)

set(OpenCV_DIR "C:/myPath/C++/opencv/opencv/build/x64/vc15/lib")

message("OpenCV_FOUND='${OpenCV_FOUND}'")
find_package( OpenCV REQUIRED )
message("OpenCV_FOUND='${OpenCV_FOUND}'")
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable(${PROJECT_NAME} "main.cpp")
message("These are my opencv libs....: '${OpenCV_LIBS}'" )
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

And .cpp file:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char **argv) {
  Mat image;
  image = imread(argv[1], 1);
  if (argc != 2 || !image.data) {
    printf("No image data \n");
    return -1;
  }
  namedWindow("Display Image", WINDOW_AUTOSIZE);
  imshow("Display Image", image);
  waitKey(0);
  return 0;
}

cmake compiles properly for me and gives me the output:

Running Windows Runtime device detection.
No winrtrunner.exe found.
Running "C:\cmake\bin\cmake.exe -E server "--pipe=\\.\pipe\{f67b9536-cd8a-43be-8b06-aa9c90087f1d}" --experimental" in C:\myPath\C++\Workingbay\build-CMAKE_TEST-cmake_test-Default.
Running "C:\cmake\bin\cmake.exe -E server "--pipe=\\.\pipe\{250b89c5-6f34-4d67-bfc6-9b0df039ab3b}" --experimental" in C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug.
Starting to parse CMake project.
Starting to parse CMake project.
OpenCV_FOUND=''
Configuring done
OpenCV_FOUND='1'
These are my opencv libs....: 'opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_world'
Configuring done
Generating done
Generating done
CMake Project was parsed successfully.
CMake Project was parsed successfully.
Starting to parse CMake project.
OpenCV_FOUND=''
OpenCV_FOUND='1'
These are my opencv libs....: 'opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_world'
Configuring done
Generating done
CMake Project was parsed successfully.

However building my project and trying to run the code results in:

18:56:36: Running steps for project OpenCV_CMake...
18:56:36: Starting: "C:\cmake\bin\cmake.exe" --build . --target all
C:\cmake\bin\cmake.exe -HC:\myPath\C++\Workingbay\OpenCV_CMake -BC:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug --check-build-system CMakeFiles\Makefile.cmake 0
C:\cmake\bin\cmake.exe -E cmake_progress_start C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug\CMakeFiles C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug\CMakeFiles\progress.marks
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 all
mingw32-make.exe[1]: Entering directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\OpenCV_CMake.dir\build.make CMakeFiles/OpenCV_CMake.dir/depend
mingw32-make.exe[2]: Entering directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
C:\cmake\bin\cmake.exe -E cmake_depends "MinGW Makefiles" C:\myPath\C++\Workingbay\OpenCV_CMake C:\myPath\C++\Workingbay\OpenCV_CMake C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug\CMakeFiles\OpenCV_CMake.dir\DependInfo.cmake --color=
Scanning dependencies of target OpenCV_CMake
mingw32-make.exe[2]: Leaving directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\OpenCV_CMake.dir\build.make CMakeFiles/OpenCV_CMake.dir/build
mingw32-make.exe[2]: Entering directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
[ 50%] Building CXX object CMakeFiles/OpenCV_CMake.dir/main.cpp.obj
C:\MinGW\bin\g++.exe   @CMakeFiles/OpenCV_CMake.dir/includes_CXX.rsp -g   -o CMakeFiles\OpenCV_CMake.dir\main.cpp.obj -c C:\myPath\C++\Workingbay\OpenCV_CMake\main.cpp
[100%] Linking CXX executable OpenCV_CMake.exe
C:\cmake\bin\cmake.exe -E cmake_link_script CMakeFiles\OpenCV_CMake.dir\link.txt --verbose=1
C:\cmake\bin\cmake.exe -E remove -f CMakeFiles\OpenCV_CMake.dir/objects.a
C:\MinGW\bin\ar.exe cr CMakeFiles\OpenCV_CMake.dir/objects.a @CMakeFiles\OpenCV_CMake.dir\objects1.rsp
C:\MinGW\bin\g++.exe -g   -Wl,--whole-archive CMakeFiles\OpenCV_CMake.dir/objects.a -Wl,--no-whole-archive  -o OpenCV_CMake.exe -Wl,--out-implib,libOpenCV_CMake.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\OpenCV_CMake.dir\linklibs.rsp
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `main':
C:/myPath/C++/Workingbay/OpenCV_CMake/main.cpp:9: undefined reference to `cv::imread(cv::String const&, int)'
C:/myPath/C++/Workingbay/OpenCV_CMake/main.cpp:14: undefined reference to `cv::namedWindow(cv::String const&, int)'
C:/myPath/C++/Workingbay/OpenCV_CMake/main.cpp:15: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
C:/myPath/C++/Workingbay/OpenCV_CMake/main.cpp:16: undefined reference to `cv::waitKey(int)'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv6StringC1EPKc':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/cvstd.hpp:602: undefined reference to `cv::String::allocate(unsigned int)'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv6StringD1Ev':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/cvstd.hpp:648: undefined reference to `cv::String::deallocate()'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv6StringaSERKS0_':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/cvstd.hpp:656: undefined reference to `cv::String::deallocate()'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv3MatD1Ev':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/mat.inl.hpp:704: undefined reference to `cv::fastFree(void*)'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv3Mat7releaseEv':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/mat.inl.hpp:816: undefined reference to `cv::Mat::deallocate()'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv3MataSEOS0_':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/mat.inl.hpp:1383: undefined reference to `cv::fastFree(void*)'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[2]: *** [OpenCV_CMake.exe] Error 1
mingw32-make.exe[1]: *** [CMakeFiles/OpenCV_CMake.dir/all] Error 2
mingw32-make.exe: *** [all] Error 2
CMakeFiles\OpenCV_CMake.dir\build.make:117: recipe for target 'OpenCV_CMake.exe' failed
mingw32-make.exe[2]: Leaving directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
CMakeFiles\Makefile2:69: recipe for target 'CMakeFiles/OpenCV_CMake.dir/all' failed
mingw32-make.exe[1]: Leaving directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
Makefile:85: recipe for target 'all' failed
18:56:42: The process "C:\cmake\bin\cmake.exe" exited with code 2.
Error while building/deploying project OpenCV_CMake (kit: cmake_test)
When executing step "CMake Build"
18:56:42: Elapsed time: 00:05.

How can I link the opencv libraries correctly?

I would like to work with the pre-built version of the opencv libraries in qt creator with either cmake or qmake in windows.

I have already tried various tutorials and asked colleagues at university without much success. However maybe someone sees, what could be wrong and how to fix it. I would be extremely happy, if someone could help me: I updated and use the latest versions qt creator, mingw, cmake and opencv. In "C:/myPath/C++/opencv/opencv/build/x64/vc15/lib" lie the files: "opencv_world341.lib" and "opencv_world341d.lib", they are each about the size: 2.2MB.

I have the CMake File:

cmake_minimum_required(VERSION 2.8)
project(OpenCV_CMake)

set(OpenCV_DIR "C:/myPath/C++/opencv/opencv/build/x64/vc15/lib")

message("OpenCV_FOUND='${OpenCV_FOUND}'")
find_package( OpenCV REQUIRED )
message("OpenCV_FOUND='${OpenCV_FOUND}'")
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable(${PROJECT_NAME} "main.cpp")
message("These are my opencv libs....: '${OpenCV_LIBS}'" )
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

And .cpp file:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char **argv) {
  Mat image;
  image = imread(argv[1], 1);
  if (argc != 2 || !image.data) {
    printf("No image data \n");
    return -1;
  }
  namedWindow("Display Image", WINDOW_AUTOSIZE);
  imshow("Display Image", image);
  waitKey(0);
  return 0;
}

cmake compiles properly for me and gives me the output:

Running Windows Runtime device detection.
No winrtrunner.exe found.
Running "C:\cmake\bin\cmake.exe -E server "--pipe=\\.\pipe\{f67b9536-cd8a-43be-8b06-aa9c90087f1d}" --experimental" in C:\myPath\C++\Workingbay\build-CMAKE_TEST-cmake_test-Default.
Running "C:\cmake\bin\cmake.exe -E server "--pipe=\\.\pipe\{250b89c5-6f34-4d67-bfc6-9b0df039ab3b}" --experimental" in C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug.
Starting to parse CMake project.
Starting to parse CMake project.
OpenCV_FOUND=''
Configuring done
OpenCV_FOUND='1'
These are my opencv libs....: 'opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_world'
Configuring done
Generating done
Generating done
CMake Project was parsed successfully.
CMake Project was parsed successfully.
Starting to parse CMake project.
OpenCV_FOUND=''
OpenCV_FOUND='1'
These are my opencv libs....: 'opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_world'
Configuring done
Generating done
CMake Project was parsed successfully.

However building my project and trying to run the code results in:

18:56:36: Running steps for project OpenCV_CMake...
18:56:36: Starting: "C:\cmake\bin\cmake.exe" --build . --target all
C:\cmake\bin\cmake.exe -HC:\myPath\C++\Workingbay\OpenCV_CMake -BC:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug --check-build-system CMakeFiles\Makefile.cmake 0
C:\cmake\bin\cmake.exe -E cmake_progress_start C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug\CMakeFiles C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug\CMakeFiles\progress.marks
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 all
mingw32-make.exe[1]: Entering directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\OpenCV_CMake.dir\build.make CMakeFiles/OpenCV_CMake.dir/depend
mingw32-make.exe[2]: Entering directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
C:\cmake\bin\cmake.exe -E cmake_depends "MinGW Makefiles" C:\myPath\C++\Workingbay\OpenCV_CMake C:\myPath\C++\Workingbay\OpenCV_CMake C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug C:\myPath\C++\Workingbay\build-OpenCV_CMake-cmake_test-Debug\CMakeFiles\OpenCV_CMake.dir\DependInfo.cmake --color=
Scanning dependencies of target OpenCV_CMake
mingw32-make.exe[2]: Leaving directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\OpenCV_CMake.dir\build.make CMakeFiles/OpenCV_CMake.dir/build
mingw32-make.exe[2]: Entering directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
[ 50%] Building CXX object CMakeFiles/OpenCV_CMake.dir/main.cpp.obj
C:\MinGW\bin\g++.exe   @CMakeFiles/OpenCV_CMake.dir/includes_CXX.rsp -g   -o CMakeFiles\OpenCV_CMake.dir\main.cpp.obj -c C:\myPath\C++\Workingbay\OpenCV_CMake\main.cpp
[100%] Linking CXX executable OpenCV_CMake.exe
C:\cmake\bin\cmake.exe -E cmake_link_script CMakeFiles\OpenCV_CMake.dir\link.txt --verbose=1
C:\cmake\bin\cmake.exe -E remove -f CMakeFiles\OpenCV_CMake.dir/objects.a
C:\MinGW\bin\ar.exe cr CMakeFiles\OpenCV_CMake.dir/objects.a @CMakeFiles\OpenCV_CMake.dir\objects1.rsp
C:\MinGW\bin\g++.exe -g   -Wl,--whole-archive CMakeFiles\OpenCV_CMake.dir/objects.a -Wl,--no-whole-archive  -o OpenCV_CMake.exe -Wl,--out-implib,libOpenCV_CMake.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\OpenCV_CMake.dir\linklibs.rsp
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `main':
C:/myPath/C++/Workingbay/OpenCV_CMake/main.cpp:9: undefined reference to `cv::imread(cv::String const&, int)'
C:/myPath/C++/Workingbay/OpenCV_CMake/main.cpp:14: undefined reference to `cv::namedWindow(cv::String const&, int)'
C:/myPath/C++/Workingbay/OpenCV_CMake/main.cpp:15: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
C:/myPath/C++/Workingbay/OpenCV_CMake/main.cpp:16: undefined reference to `cv::waitKey(int)'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv6StringC1EPKc':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/cvstd.hpp:602: undefined reference to `cv::String::allocate(unsigned int)'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv6StringD1Ev':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/cvstd.hpp:648: undefined reference to `cv::String::deallocate()'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv6StringaSERKS0_':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/cvstd.hpp:656: undefined reference to `cv::String::deallocate()'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv3MatD1Ev':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/mat.inl.hpp:704: undefined reference to `cv::fastFree(void*)'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv3Mat7releaseEv':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/mat.inl.hpp:816: undefined reference to `cv::Mat::deallocate()'
CMakeFiles\OpenCV_CMake.dir/objects.a(main.cpp.obj): In function `ZN2cv3MataSEOS0_':
C:/myPath/C++/opencv/opencv/build/include/opencv2/core/mat.inl.hpp:1383: undefined reference to `cv::fastFree(void*)'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[2]: *** [OpenCV_CMake.exe] Error 1
mingw32-make.exe[1]: *** [CMakeFiles/OpenCV_CMake.dir/all] Error 2
mingw32-make.exe: *** [all] Error 2
CMakeFiles\OpenCV_CMake.dir\build.make:117: recipe for target 'OpenCV_CMake.exe' failed
mingw32-make.exe[2]: Leaving directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
CMakeFiles\Makefile2:69: recipe for target 'CMakeFiles/OpenCV_CMake.dir/all' failed
mingw32-make.exe[1]: Leaving directory 'C:/myPath/C++/Workingbay/build-OpenCV_CMake-cmake_test-Debug'
Makefile:85: recipe for target 'all' failed
18:56:42: The process "C:\cmake\bin\cmake.exe" exited with code 2.
Error while building/deploying project OpenCV_CMake (kit: cmake_test)
When executing step "CMake Build"
18:56:42: Elapsed time: 00:05.