justHelloWorld
justHelloWorld

Reputation: 6828

opencv: undefined reference to `cv::cuda::DescriptorMatcher::createBFMatcher(int)'

I'm trying to complie opencv-3.1.0/samples/gpu/surf_keypoint_matcher.cpp through:

g++ -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib/ -g -o binary surf_keypoint_matcher.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_stitching -lopencv_imgcodecs -lopencv_xfeatures2d

But I'm getting this error:

/tmp/ccQW7t3Z.o: In function `main':
/home/luca/Downloads/opencv-3.1.0/samples/gpu/surf_keypoint_matcher.cpp:65: undefined reference to `cv::cuda::DescriptorMatcher::createBFMatcher(int)'
collect2: error: ld returned 1 exit status

Why?

Upvotes: 1

Views: 4386

Answers (2)

Arturo Jose
Arturo Jose

Reputation: 1

DescriptorMatcher is in cudafeatures2d.hpp. So, you have to include the header cudafeatures2d.hpp in the .cpp program and link the library in the compile process.

The program runs if you use this -lopencv_cudafeatures2d:

g++ -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib/ -g -o binary surf_gpu_probe1.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_stitching -lopencv_imgcodecs -lopencv_xfeatures2d -lopencv_cudafeatures2d

Upvotes: 0

EdChum
EdChum

Reputation: 394041

Your error message:

/home/luca/Downloads/opencv-3.1.0/samples/gpu/surf_keypoint_matcher.cpp:65: undefined reference to `cv::cuda::DescriptorMatcher::createBFMatcher(int)'
collect2: error: ld returned 1 exit status

shows that you have an undefined reference to cv::cuda::DescriptorMatcher::createBFMatcher

this resides in the cuda libs so you need to include the appropriate headers and link into the following libs as opencv_cudafeatures2d depends on them:

  • opencv_cudafilters
  • opencv_cudawarping
  • opencv_features2d
  • opencv_cudaarithmn
  • opencv_flann
  • opencv_core

certainly this is true for opencv version 3.1.0 which is what I'm using

Upvotes: 1

Related Questions