【问题标题】:Makefile for linking OpenCV and Existing Library (Without using cmake)用于链接 OpenCV 和现有库的 Makefile(不使用 cmake)
【发布时间】:2018-06-11 18:44:54
【问题描述】:

目前,我正在研究如何使用 Makefile 将现有库与 OpenCV 链接。我还是 Makefile 的新手。我在互联网上搜索过,但大多数答案都在 CMake 上。即使有答案,结果的输出也包含错误。请看一下我的 Makefile,我做错了什么吗?

生成文件

###############################################################
#
# Purpose: Makefile for "head_tracking"
# Author.: robotis
# Version: 0.1
# License: GPL
#
###############################################################

TARGET = head_tracking

INCLUDE_DIRS = -I../../../include -I../../../../Framework/include

CXX = g++
CXXFLAGS += -O2 -DLINUX -Wall $(INCLUDE_DIRS)
#CXXFLAGS += -O2 -DDEBUG -DLINUX -Wall $(INCLUDE_DIRS)
LFLAGS += -lpthread -ljpeg -lrt
CPPFLAGS = $(shell pkg-config --cflags opencv2) #The one i added
LDLIBS = $(shell pkg-config --libs opencv2)     #The one i addded

OBJECTS =   main.o

all: $(TARGET)

clean:
    rm -f *.a *.o $(TARGET) core *~ *.so *.lo

libclean:
    make -C ../../../build clean

distclean: clean libclean

darwin.a:
    make -C ../../../build

$(TARGET): darwin.a $(OBJECTS)
    $(CXX) $(CFLAGS) $(OBJECTS) ../../../lib/darwin.a -o $(TARGET) $(LFLAGS)
    chmod 755 $(TARGET)

# useful to make a backup "make tgz"
tgz: clean
    mkdir -p backups
    tar czvf ./backups/head_tracking_`date +"%Y_%m_%d_%H.%M.%S"`.tgz --exclude backups *

Error Image: Undefined Refrenced

【问题讨论】:

    标签: c++ opencv makefile g++ ubuntu-12.04


    【解决方案1】:

    好的,我终于解决了我的链接错误。我现在可以用我的 Robotis-Op 库编译 openCV。这是新的 Makefile。

    ###############################################################
    #
    # Purpose: Makefile for "head_tracking"
    # Author.: robotis
    # Version: 0.1
    # License: GPL
    #
    ###############################################################
    
    TARGET = head_tracking
    
    INCLUDE_DIRS = -I../../../include -I../../../../Framework/include -I/usr/local/include/opencv2
    
    CXX = g++
    CXXFLAGS += -O2 -DLINUX -Wall $(INCLUDE_DIRS) `pkg-config --cflags opencv`
    #CXXFLAGS += -O2 -DDEBUG -DLINUX -Wall $(INCLUDE_DIRS)
    LFLAGS += -lpthread -ljpeg -lrt 
    LDFLAGS = `pkg-config --libs opencv` 
    #CPPFLAGS = $(shell pkg-config --cflags opencv2)
    #LDLIBS = $(shell pkg-config --libs opencv2)
    
    OBJECTS =   main.o
    
    all: $(TARGET)
    
    clean:
        rm -f *.a *.o $(TARGET) core *~ *.so *.lo
    
    libclean:
        make -C ../../../build clean
    
    distclean: clean libclean
    
    darwin.a:
        make -C ../../../build
    
    $(TARGET): darwin.a $(OBJECTS)
        $(CXX) $(CFLAGS) $(OBJECTS) ../../../lib/darwin.a -o $(TARGET) $(LFLAGS) $(LDFLAGS)
        chmod 755 $(TARGET)
    
    # useful to make a backup "make tgz"
    tgz: clean
        mkdir -p backups
        tar czvf ./backups/head_tracking_`date +"%Y_%m_%d_%H.%M.%S"`.tgz --exclude back
    
    ups *
    

    【讨论】:

    • 对于任何感兴趣的人,更改如下:-I/usr/local/include/opencv2 添加到 INCLUDE_DIRS,`pkg-config --cflags opencv` 添加到 CXXFLAGS,LDFLAGS 变量创建并添加到 $(CXX) 行
    【解决方案2】:

    您遇到链接错误, 您需要链接以下标志:

    -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_tsl

    OpenCV Undefined symbols for architecture x86_64: error

    【讨论】:

    • 你是对的,谢谢。它的作品就像一个魅力,我在这个领域还是新手。非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多