makefile如何調(diào)用靜態(tài)庫(kù)的方法實(shí)現(xiàn)
makefile如何調(diào)用靜態(tài)庫(kù)
1、在windows下 g++環(huán)境中,調(diào)用一個(gè)python的靜態(tài)鏈接庫(kù),在makefile文件有一段是全局的g++命令:
$(PROG): $(OBJS) $(CXX) $(LFLAGS) $^ -o $@
現(xiàn)在我要鏈接上一個(gè)python的靜態(tài)庫(kù),lib存儲(chǔ)在makefile同目錄下libs文件夾下:
$(PROG): $(OBJS) $(CXX) $(LFLAGS) $^ -o $@ ./libs/libpython37.a
2、在Linux Ubuntu 18.04版本中添加靜態(tài)庫(kù),視python版本而定:
$(PROG): $(OBJS) $(CXX) $(LFLAGS) $^ -o $@ -lpython3.6m
Makefile 如何調(diào)用opencv 的靜態(tài)庫(kù)
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:編譯選項(xiàng), LDFLAGS:鏈接選項(xiàng) 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 # 親們,順序不能變,因?yàn)檫@個(gè)快把我整崩潰了 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: # 動(dòng)態(tài)庫(kù)的時(shí)候需要尋找的路徑 #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 是用調(diào)用動(dòng)態(tài)庫(kù)的方式來(lái)調(diào)用靜態(tài)庫(kù),如果同時(shí)存在靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù),會(huì)優(yōu)先調(diào)用動(dòng)態(tài)庫(kù)
EXE=CppWebServer #SUBDIR=src object #CXXFLAGS:編譯選項(xiàng), LDFLAGS:鏈接選項(xiàng) 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 # 這種方式調(diào)用靜態(tài)庫(kù),保證在在動(dòng)態(tài)庫(kù)也存在的時(shí)候也能調(diào)用到靜態(tài)庫(kù) 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)
到此這篇關(guān)于makefile如何調(diào)用靜態(tài)庫(kù)的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)makefile調(diào)用靜態(tài)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt6.0開(kāi)發(fā)環(huán)境搭建步驟(圖文)
這篇文章主要介紹了Qt6.0開(kāi)發(fā)環(huán)境搭建步驟(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03詳解c++ atomic原子編程中的Memory Order
在多核編程中,我們使用內(nèi)核對(duì)象【如:事件對(duì)象(Event)、互斥量對(duì)象(Mutex,或互斥體對(duì)象)、信號(hào)量對(duì)象(Semaphore)等】來(lái)避免多個(gè)線程修改同一個(gè)數(shù)據(jù)時(shí)產(chǎn)生的競(jìng)爭(zhēng)條件。本文將詳細(xì)介紹c++ atomic原子編程中的Memory Order。2021-06-06C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單井字棋游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04QT自定義QTextEdit實(shí)現(xiàn)大數(shù)據(jù)的實(shí)時(shí)刷新顯示功能實(shí)例
TextEdit是我們常用的Qt控件,用來(lái)顯示文本信息,下面這篇文章主要給大家介紹了關(guān)于QT自定義QTextEdit實(shí)現(xiàn)大數(shù)據(jù)的實(shí)時(shí)刷新顯示功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05C語(yǔ)言實(shí)現(xiàn)井字棋游戲(人機(jī)對(duì)弈)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)井字棋人機(jī)對(duì)弈游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01C語(yǔ)言時(shí)間函數(shù)的ctime()和gmtime()你了解嗎
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言時(shí)間函數(shù)的ctime()和gmtime(),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02