時隔一年多球匕,一個任務(wù)又讓我用到了C++調(diào)用opencv進行圖片的處理鸠匀,最終編譯成鏈接庫钦听。 但是本來也不熟悉也忘得差不多了導(dǎo)致我在環(huán)境部署和寫makefile都很費勁。
中間報了好幾個錯硼莽,一直以為是程序原因庶溶,其實都是makefile沒寫好。最后沒辦法還是找到了一年前別人給我寫的makefile照著改了改還真的好了懂鸵,太感謝幫助過我的人偏螺。
1》錯誤1:
原因:? 在CFLAGS?后面加上?--std=c++11
然后make clean -> make
2》錯誤2:
我想現(xiàn)在舊的makefile上的--std=c++11后面加上了-static,之后報錯如下匆光。
3》錯誤3:
在網(wǎng)上報讀試了各種方法還是不行套像,最終修改makefile文件如下
不過還好終于實現(xiàn)了,編譯成功终息。接下來記錄下makefile文件夺巩。
# 1贞让、準備工作,編譯方式柳譬、目標文件名喳张、依賴庫路徑的定義。
CC = g++CFLAGS := -Wall -O3 -std=c++0x
# opencv 頭文件和lib路徑
OPENCV_INC_ROOT = /usr/local/include
OPENCV_LIB_ROOT = /usr/local/lib64
# ffmpeg 頭文件和lib路徑
FFMPEG_INC_ROOT = /usr/local/ffmpeg/include
FFMPEG_LIB_ROOT = /usr/local/ffmpeg/lib
# mysql 頭文件和lib路徑
MYSQL_INC_ROOT = /usr/include/mysql
MYSQL_LIB_ROOT = /usr/lib64/mysql
OBJS = key_Frame.o
LIB = libKeyFrame.so
OPENCV_INC= -I$(OPENCV_INC_ROOT)
FFMPEG_INC= -I$(FFMPEG_INC_ROOT)
MYSQL_INC = -I$(MYSQL_INC_ROOT)
INCLUDE_PATH = $(OPENCV_INC)
INCLUDE_PATH_FFMPEG = $(FFMPEG_INC)
INCLUDE_PATH_MYSQL = $(MYSQL_INC)
LIB_PATH = -L$(OPENCV_LIB_ROOT)
LIB_PATH_FFMPEG = -L$(FFMPEG_LIB_ROOT)
LIB_PATH_MYSQL = -L$(MYSQL_LIB_ROOT)
# 依賴的lib名稱
OPENCV_LIB = -lopencv_dnn -lopencv_flann -lopencv_videoio -lopencv_videostab -lopencv_superres -lopencv_video -lopencv_ml -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_calib3d -lopencv_features2d -lopencv_imgcodecs -lopencv_objdetect -lopencv_core -lopencv_highgui -lopencv_imgproc
FFMPEG_LIB = -lavcodec -lavformat -lavutil -lavdevice -lavfilter -lswscale -lswresampleMYSQL_LIB = -lmysqlclient
all : $(LIB)
%.o : %.cpp
? ? ? ? $(CC) $(CFLAGS) -fpic -c $< -o $@ $(INCLUDE_PATH) $(LIB_PATH) $(OPENCV_LIB) $(INCLUDE_PATH_FFMPEG) $(LIB_PATH_FFMPEG) $(FFMPEG_LIB) $(INCLUDE_PATH_MYSQL) $(LIB_PATH_MYSQL) $(MYSQL_LIB)
$(LIB) : $(OBJS)
? ? ? ? rm -f $@
? ? ? ? g++ -shared -o $@ $(OBJS)
? ? ? ? rm -f $(OBJS)
tags :
? ? ? ? ctags -R *
PHONY:clean
clean:
? ? ? ? rm -f $(OBJS) $(TAGRET) $(LIB)