makefile如何调用静态库的方法实现
makefile如何调用静态库
1、在windows下g++环境中,调用一个python的静态链接库,在makefile文件有一段是全局的g++命令:
$(PROG):$(OBJS) $(CXX)$(LFLAGS)$^-o$@
现在我要链接上一个python的静态库,lib存储在makefile同目录下libs文件夹下:
$(PROG):$(OBJS) $(CXX)$(LFLAGS)$^-o$@./libs/libpython37.a
2、在LinuxUbuntu18.04版本中添加静态库,视python版本而定:
$(PROG):$(OBJS) $(CXX)$(LFLAGS)$^-o$@-lpython3.6m
Makefile如何调用opencv的静态库
main.cpp
#include#include"opencv2/opencv.hpp" intmain() { cv::Matimage=cv::imread("./testPic/jianhui.jpg"); //cv::imshow("xxx",image); //cv::waitKey(40); printf("image.col=%dimage.row=%d\n",image.cols,image.rows); cv::imwrite("aa.jpg",image); return0; }
Makefile
EXE=main
#SUBDIR=srcobject
#CXXFLAGS:编译选项,LDFLAGS:链接选项
thirdparty_root:=/local_install/static
CC:=g++
#exportPKG_CONFIG_PATH:=${thirdparty_root}/lib/pkgconfig:${PKG_CONFIG_PATH}
#INCS+=`pkg-config--cflagsopencv`
#LIBS+=`pkg-config--libsopencv`
INCS:=-I${thirdparty_root}/include
LIBS+=-L${thirdparty_root}/lib-lopencv_imgcodecs-lopencv_dnn-lopencv_imgproc-lopencv_core
#LIBS+=-L${thirdparty_root}/lib-lopencv_imgcodecs-lopencv_imgproc-lopencv_core#亲们,顺序不能变,因为这个快把我整崩溃了
LIBS+=-L${thirdparty_root}/share/OpenCV/3rdparty/lib-lIlmImf-llibjasper-llibjpeg-llibpng-llibtiff-llibwebp-lzlib-lippicv-ldl
CXXFLAGS:=-Wall-c-O2-std=c++11$(INCS)
LDFLAGS:=$(LIBS)
LDFLAGS+=-lpthread
#LDFLAGS+=-Wl,-rpath,${thirdparty_root}/share/OpenCV/3rdparty/lib:${thirdparty_root}/lib:#动态库的时候需要寻找的路径
#CXX_SOURCES=$(foreachdir,$(SUBDIR),$(wildcard$(dir)/*.cpp))
#CXX_OBJECTS=$(patsubst%.cpp,%.o,$(CXX_SOURCES))
CXX_OBJECTS:=$(patsubst%.cpp,%.o,$(shellfind.-name"*.cpp"))
DEP_FILES=$(patsubst%.o,%.d,$(CXX_OBJECTS))
$(EXE):$(CXX_OBJECTS)
$(CC)$(CXX_OBJECTS)-o$(EXE)$(LDFLAGS)
%.o:%.cpp
$(CC)-c$(CXXFLAGS)-MMD$<-o$@
-include$(DEP_FILES)
clean:
rm-rf$(CXX_OBJECTS)$(DEP_FILES)$(EXE)
test:
echo$(CXX_OBJECTS)
上面的Makefile是用调用动态库的方式来调用静态库,如果同时存在静态库和动态库,会优先调用动态库
EXE=CppWebServer
#SUBDIR=srcobject
#CXXFLAGS:编译选项,LDFLAGS:链接选项
CC:=g++
thirdparty_root:=/local_install/static
#INCS+=`pkg-config--cflagsopencv`
INCS+=-I/usr/lib/jdk1.8.0_191/include
INCS+=-I/usr/lib/jdk1.8.0_191/include/linux/
INCS+=-I./include
INCS:=-I${thirdparty_root}/include
#这种方式调用静态库,保证在在动态库也存在的时候也能调用到静态库
LIBS+=${thirdparty_root}/lib/libopencv_imgcodecs.a
LIBS+=${thirdparty_root}/lib/libopencv_dnn.a
LIBS+=${thirdparty_root}/lib/libopencv_imgproc.a
LIBS+=${thirdparty_root}/lib/libopencv_core.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/libIlmImf.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/liblibjasper.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/liblibjasper.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/liblibjpeg.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/liblibpng.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/liblibtiff.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/liblibwebp.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/libzlib.a
LIBS+=${thirdparty_root}/share/OpenCV/3rdparty/lib/libippicv.a
LIBS+=-L./lib-lTHFaceImage-lTHFeature
LIBS+=-ldl
#LIBS+=`pkg-config--libsopencv`
CXXFLAGS:=-Wall-c-O2-std=c++11$(INCS)
LDFLAGS:=$(LIBS)
LDFLAGS+=-lpthread
#CXXFLAGS+=-I/usr/local/include/
#LDFLAGS+=-L/usr/local/lib-lopencv_world
#CXX_SOURCES=$(foreachdir,$(SUBDIR),$(wildcard$(dir)/*.cpp))
#CXX_OBJECTS=$(patsubst%.cpp,%.o,$(CXX_SOURCES))
CXX_OBJECTS:=$(patsubst%.cpp,%.o,$(shellfind.-name"*.cpp"))
CXX_OBJECTS+=$(patsubst%.c,%.o,$(shellfind.-name"*.c"))
DEP_FILES=$(patsubst%.o,%.d,$(CXX_OBJECTS))
$(EXE):$(CXX_OBJECTS)
$(CC)$(CXX_OBJECTS)-o$(EXE)$(LDFLAGS)
%.o:%.cpp
$(CC)-c$(CXXFLAGS)-MMD$<-o$@
-include$(DEP_FILES)
clean:
rm-rf$(CXX_OBJECTS)$(DEP_FILES)$(EXE)
OBJ_DIR=obj
move:
if[!-d$(OBJ_DIR)];thenmkdir-p$(OBJ_DIR);fi;\
mv$(CXX_OBJECTS)$(OBJ_DIR);\
mv$(DEP_FILES)$(OBJ_DIR);\
mv$(EXE)$(OBJ_DIR)
test:
echo$(CXX_OBJECTS)
到此这篇关于makefile如何调用静态库的方法实现的文章就介绍到这了,更多相关makefile调用静态库内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!