linux makefile添加opencv庫


下面是已有的makefile的部分代碼

PREFIX = /usr/local
INCLUDES = -I../UsageEnvironment/include -I../groupsock/include -I../liveMedia/include -I../BasicUsageEnvironment/include
# Default library filename suffixes for each library that we link with. The "config.*" file might redefine these later.
libliveMedia_LIB_SUFFIX = $(LIB_SUFFIX)
libBasicUsageEnvironment_LIB_SUFFIX = $(LIB_SUFFIX)
libUsageEnvironment_LIB_SUFFIX = $(LIB_SUFFIX)
libgroupsock_LIB_SUFFIX = $(LIB_SUFFIX)

##### Change the following for your environment:
COMPILE_OPTS = $(INCLUDES) -m64 -fPIC -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
MEDIA_SERVER = live555MediaServer$(EXE)
ALL = $(MEDIA_SERVER)
all: $(ALL)
MEDIA_SERVER_OBJS = live555MediaServer.$(OBJ) DynamicRTSPServer.$(OBJ)
live555MediaServer.$(CPP): DynamicRTSPServer.hh version.hh
DynamicRTSPServer.$(CPP): DynamicRTSPServer.hh
USAGE_ENVIRONMENT_DIR
= ../UsageEnvironment USAGE_ENVIRONMENT_LIB = $(USAGE_ENVIRONMENT_DIR)/libUsageEnvironment.$(libUsageEnvironment_LIB_SUFFIX) BASIC_USAGE_ENVIRONMENT_DIR = ../BasicUsageEnvironment BASIC_USAGE_ENVIRONMENT_LIB = $(BASIC_USAGE_ENVIRONMENT_DIR)/libBasicUsageEnvironment.$(libBasicUsageEnvironment_LIB_SUFFIX) LIVEMEDIA_DIR = ../liveMedia LIVEMEDIA_LIB = $(LIVEMEDIA_DIR)/libliveMedia.$(libliveMedia_LIB_SUFFIX) GROUPSOCK_DIR = ../groupsock GROUPSOCK_LIB = $(GROUPSOCK_DIR)/libgroupsock.$(libgroupsock_LIB_SUFFIX) LOCAL_LIBS = $(LIVEMEDIA_LIB) $(GROUPSOCK_LIB) \ $(BASIC_USAGE_ENVIRONMENT_LIB) $(USAGE_ENVIRONMENT_LIB) LIBS = $(LOCAL_LIBS) $(LIBS_FOR_CONSOLE_APPLICATION) live555MediaServer$(EXE): $(MEDIA_SERVER_OBJS) $(LOCAL_LIBS) $(LINK)$@ $(CONSOLE_LINK_OPTS) $(MEDIA_SERVER_OBJS) $(LIBS) #live555MediaServer$(EXE): $(MEDIA_SERVER_OBJS) $(LOCAL_LIBS) # c++ -o $@ -L. $(MEDIA_SERVER_OBJS) $(LIBS)

首先我們需要看main程序包含了哪些第三方頭文件,打開main程序

可以看到包含了core.hpp  imgproc.hpp  highgui.hpp videoio.hpp 這四個opencv庫的頭文件,因此首先需要找到這些頭文件的位置,將這些頭文件位置寫入到makefile中。

可以通過文件搜索來找到這些文件的位置

可以看到這些文件都在這個文件夾中,由於頭文件中自帶了這些文件的上級文件夾名,因此添加路徑時也可以只包括到這個文件夾的上級文件夾名稱,即opencv4即可

所以在INCLUDE后面添加 -I/usr/local/include/opencv4

頭文件加進去之后,還要找到對應的庫添加到makefile中,庫的名稱通常和頭文件名稱對應,如果不知道庫的名稱,可以通過名稱搜索來尋找這些庫的位置,比如core.hpp可以搜索core.a 或者 core.so,然后在搜索出來的結果中篩選出正確的庫文件

這里的libopencv_core.so就是需要添加的庫文件之一了。

進入到這個路徑的文件夾中,可以看到這個文件夾中還包含有其他的頭文件對應的庫,因此是這個路徑沒錯了

然后就需要在makefile中添加

OPENCV_DIR = -L/usr/local/lib
OPENCV_LIBS= $(OPENCV_DIR) -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_videoio

OPENCV_LIBS 這個變量就是需要添加的庫路徑和庫

然后再把這個庫添加到編譯規則中去

將LIBS中添加 $(OPENCV_LIBS)  這樣在執行編譯規則時,才能用上這些庫,一定要添加到規則中,讓規則找得到這些庫才算添加成功

修改之后的makefile如下所示,修改過的部分用紅色標記出

PREFIX = /usr/local
INCLUDES = -I../UsageEnvironment/include -I../groupsock/include -I../liveMedia/include -I../BasicUsageEnvironment/include  -I/usr/local/include/opencv4
# Default library filename suffixes for each library that we link with. The "config.*" file might redefine these later.
libliveMedia_LIB_SUFFIX = $(LIB_SUFFIX)
libBasicUsageEnvironment_LIB_SUFFIX = $(LIB_SUFFIX)
libUsageEnvironment_LIB_SUFFIX = $(LIB_SUFFIX)
libgroupsock_LIB_SUFFIX = $(LIB_SUFFIX)

##### Change the following for your environment:
COMPILE_OPTS = $(INCLUDES) -m64 -fPIC -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
MEDIA_SERVER = live555MediaServer$(EXE)
ALL = $(MEDIA_SERVER)
all: $(ALL)
MEDIA_SERVER_OBJS = live555MediaServer.$(OBJ) DynamicRTSPServer.$(OBJ)
live555MediaServer.$(CPP): DynamicRTSPServer.hh version.hh
DynamicRTSPServer.$(CPP): DynamicRTSPServer.hh

USAGE_ENVIRONMENT_DIR = ../UsageEnvironment
USAGE_ENVIRONMENT_LIB = $(USAGE_ENVIRONMENT_DIR)/libUsageEnvironment.$(libUsageEnvironment_LIB_SUFFIX)
BASIC_USAGE_ENVIRONMENT_DIR = ../BasicUsageEnvironment
BASIC_USAGE_ENVIRONMENT_LIB = $(BASIC_USAGE_ENVIRONMENT_DIR)/libBasicUsageEnvironment.$(libBasicUsageEnvironment_LIB_SUFFIX)
LIVEMEDIA_DIR = ../liveMedia
LIVEMEDIA_LIB = $(LIVEMEDIA_DIR)/libliveMedia.$(libliveMedia_LIB_SUFFIX)
GROUPSOCK_DIR = ../groupsock
GROUPSOCK_LIB = $(GROUPSOCK_DIR)/libgroupsock.$(libgroupsock_LIB_SUFFIX)
OPENCV_DIR = -L/usr/local/lib
OPENCV_LIBS= $(OPENCV_DIR) -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_videoio

LOCAL_LIBS = $(LIVEMEDIA_LIB) $(GROUPSOCK_LIB) \
$(BASIC_USAGE_ENVIRONMENT_LIB) $(USAGE_ENVIRONMENT_LIB)
LIBS = $(LOCAL_LIBS) $(OPENCV_LIBS) $(LIBS_FOR_CONSOLE_APPLICATION)

live555MediaServer$(EXE): $(MEDIA_SERVER_OBJS) $(LOCAL_LIBS)
$(LINK)$@ $(CONSOLE_LINK_OPTS) $(MEDIA_SERVER_OBJS) $(LIBS)

#live555MediaServer$(EXE): $(MEDIA_SERVER_OBJS) $(LOCAL_LIBS)
# c++ -o $@ -L. $(MEDIA_SERVER_OBJS) $(LIBS)

添加完成之后,在執行make,就可以看到不再提示錯誤

或者提示找不到函數的錯誤

會正常完成編譯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM