linux C++调用opencv测试类编译成链接库
时隔一年多,一个任务又让我用到了C++调用opencv进行图片的处理,最终编译成链接库。 但是本来也不熟悉也忘得差不多了导致我在环境部署和写makefile都很费劲。
中间报了好几个错,一直以为是程序原因,其实都是makefile没写好。最后没办法还是找到了一年前别人给我写的makefile照着改了改还真的好了,太感谢帮助过我的人。
1》错误1:
原因: 在CFLAGS 后面加上 --std=c++11
然后make clean -> make
2》错误2:
我想现在旧的makefile上的--std=c++11后面加上了-static,之后报错如下。
3》错误3:
在网上报读试了各种方法还是不行,最终修改makefile文件如下
不过还好终于实现了,编译成功。接下来记录下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)