对 `cv::groupRectangles` 的未定义引用

undefined reference to `cv::groupRectangles`

我想交叉编译我的程序,所以我写了一个makefile:

    CC= arm-buildroot-linux-gnueabihf-g++
CFLAGS= -W -Wall -v -O3 -ftree-vectorize  -std=c++0x 
OPENCV= -I '/home/slim/Desktop/buildroot-2016.02/output/staging/usr/include/' -L '/home/slim/Desktop/buildroot-2016.02/output/staging/usr/lib' -lopencv_core  -lopencv_highgui -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_imgproc  -lopencv_video 
BIN = ./bin/

all: detection.o Ctracker.o HungarianAlg.o  Kalman.o 
    $(CC) $(CFLAGS) $(BIN)detection.o $(BIN)Ctracker.o $(BIN)HungarianAlg.o $(BIN)Kalman.o  -o dect $(OPENCV)



detection.o: Ctracker.h detection.cpp
    $(CC) $(CFLAGS) $(OPENCV) -c detection.cpp -o $(BIN)detection.o 


Ctracker.o: Ctracker.h HungarianAlg.h Kalman.h
    $(CC) $(CFLAGS) $(OPENCV) -c Ctracker.cpp -o $(BIN)Ctracker.o 

HungarianAlg.o: HungarianAlg.h
    $(CC) $(CFLAGS) $(OPENCV) -c HungarianAlg.cpp -o $(BIN)HungarianAlg.o 

Kalman.o: HungarianAlg.h
    $(CC) $(CFLAGS) -c Kalman.cpp -o $(BIN)Kalman.o 


clean:
    rm $(BIN)*

我在 makefile 中添加了我的库的所有链接器,但是当我 运行 make 时,我遇到了这些错误,但我不知道如何修复它:

    ./bin/detection.o: In function `drawBoundingBox(std::vector<std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >, std::allocator<std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > > > >)':
detection.cpp:(.text+0x46c): undefined reference to `cv::groupRectangles(std::vector<cv::Rect_<int>, std::allocator<cv::Rect_<int> > >&, int, double)'
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

首先要了解的是,您遇到了链接器错误。

然后请注意,您正在尝试使用 cv::groupRectangles,但链接器无法链接它。根据 openCV documentation,它是 Object Detection 模块的一部分。

我在互联网上搜索了 "OpenCV Object Detection tutorials",他们都在他们的 make 文件中链接了 opencv_objdetect。因此,尝试将 -lopencv_objdetect 添加到 makefile 中定义变量 OPENCV 的第三行,看看是否有帮助。