makefile如何调用静态库的方法实现

Nicole ·
更新时间:2024-11-14
· 714 次阅读

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、在Linux Ubuntu 18.04版本中添加静态库,视python版本而定:

$(PROG): $(OBJS) $(CXX) $(LFLAGS) $^ -o $@ -lpython3.6m Makefile 如何调用opencv 的静态库

main.cpp

#include <stdio.h> #include "opencv2/opencv.hpp" int main() { cv::Mat image = cv::imread("./testPic/jianhui.jpg"); //cv::imshow("xxx", image); //cv::waitKey(40); printf("image.col=%d image.row=%d \n", image.cols, image.rows); cv::imwrite("aa.jpg", image); return 0; }

Makefile

EXE=main #SUBDIR=src object #CXXFLAGS:编译选项, LDFLAGS:链接选项 thirdparty_root := /local_install/static CC := g++ #export PKG_CONFIG_PATH := ${thirdparty_root}/lib/pkgconfig:${PKG_CONFIG_PATH} #INCS += `pkg-config --cflags opencv` #LIBS += `pkg-config --libs opencv` 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 =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.cpp)) #CXX_OBJECTS=$(patsubst %.cpp, %.o, $(CXX_SOURCES)) CXX_OBJECTS := $(patsubst %.cpp,%.o,$(shell find . -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=src object #CXXFLAGS:编译选项, LDFLAGS:链接选项 CC := g++ thirdparty_root := /local_install/static #INCS += `pkg-config --cflags opencv` 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 --libs opencv` 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 =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.cpp)) #CXX_OBJECTS=$(patsubst %.cpp, %.o, $(CXX_SOURCES)) CXX_OBJECTS := $(patsubst %.cpp,%.o,$(shell find . -name "*.cpp")) CXX_OBJECTS += $(patsubst %.c,%.o,$(shell find . -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) ]; then mkdir -p $(OBJ_DIR); fi;\ mv $(CXX_OBJECTS) $(OBJ_DIR); \ mv $(DEP_FILES) $(OBJ_DIR); \ mv $(EXE) $(OBJ_DIR) test: echo $(CXX_OBJECTS)

到此这篇关于makefile如何调用静态库的方法实现的文章就介绍到这了,更多相关makefile调用静态库内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!

您可能感兴趣的文章:C++关于Makefile的详解含通用模板C语言 makefile学习及实现实例Linux下Makefile的automake生成全攻略linux中无make命令的问题(make: *** 没有指明目标并且找不到 makefile及make命令安装方法)Linux Makefile与Shell的问题Makefile/cmake/node-gyp中区分判断不同平台的方法使用autoconf生成Makefile并编译工程的步骤



静态库 调用 方法 静态 makefile

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章