下面是已有的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,就可以看到不再提示錯誤
或者提示找不到函數的錯誤
會正常完成編譯。