使用OpenCV为程序编写makefile,链接错误

时间:2015-04-07 22:11:38

标签: c++ opencv makefile

我正在尝试编写一个makefile来使用OpenCV编译一些代码,这是我的makefile:

    CC=g++
    CFLAGS=-c -Wall -I/home/me/OpenCV2/opencv-2.4.11/include
    LIBS=-L/home/me/OpenCV2/opencv-2.4.11/build/lib/ -lopencv_features2d -lopencv_imgproc -lopencv_core -lopencv_legacy -lopencv_nonfree -lopencv_ocl -lopencv_contrib

    all: code

    code: codeUtils.o codeLibs.o code.o 
        $(CC) $(LIBS) codeUtils.o codeLibs.o code.o -o code

   code.o:code.cpp
        $(CC) $(CFLAGS) $(LIBS)  code.cpp

    codeUtils.o: codeUtils.cpp
        $(CC) $(CFLAGS) $(LIBS)  codeUtils.cpp

codeLibs.o: codeLibs.cpp
    $(CC) $(CFLAGS) $(LIBS)  codeLibs.cpp

然而,它产生了许多未定义的引用'错误,哪个部分在makefile中是错误的?感谢

错误看起来像这样:

    codeUtils.o: In function `getGradients(cv::Mat const&, cv::Mat&, cv::Mat&)':
    codeUtils.cpp:(.text+0x23): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)'
    codeUtils.cpp:(.text+0x36): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
    codeUtils.cpp:(.text+0x6f): undefined reference to `cv::Sobel(cv::_InputArray const&, cv::_OutputArray const&, int, int, int, int, double, double, int)'
    codeUtils.cpp:(.text+0x82): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)'
    codeUtils.cpp:(.text+0x95): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
    codeUtils.cpp:(.text+0xce): undefined reference to `cv::Sobel(cv::_InputArray const&, cv::_OutputArray const&, int, int, int, int, double, double, int)'
   codeUtils.o: In function `getHOGatKey(cv::KeyPoint const&, cv::Mat const&, cv::Mat const&, int, int, cv::Mat&)':
   codeUtils.cpp:(.text+0x139): undefined reference to `cv::Mat::zeros(int, int, int)'

1 个答案:

答案 0 :(得分:0)

你的图书馆似乎不太对劲。 pkg-config可能会帮助您:

    CFLAGS=-c -Wall `pkg-config --cflags opencv`
    LIBS=`pkg-config --libs opencv`

如果由于某种原因没有调用opencv,你可能会在$ pkg-config --list-all$ locate opencv.pc中找到它来查找文件(我不太确定它将如何处理本地安装。 )如果您找到PKG_CONFIG_PATH文件并希望将其包含在.pc的搜索路径中,则可以设置pkg-config