簡體   English   中英

如何在makefile中的給定目錄中鏈接opencv lib

[英]How to link opencv lib in a given directory in makefile

我正在編譯一個項目,我想將它鏈接到給定目錄中的 opencv,而不是像/usr/local/lib/libopencv這樣的系統目錄

最后是默認的 makefile,它鏈接到系統目錄/usr/local/lib

我要鏈接的 opencv 位於目錄../../third_party/opencv/ ,帶有../../third_party/opencv/include/../../third_party/opencv/lib/ 絕對路徑是/home/somepath/third_party/opencv/

我應該如何修改makefile以將項目鏈接到我想要使用的 opencv,而不是系統版本?

目前,當我編譯項目並使用ldd檢查其依賴項時,請說ldd evaluate | grep opencv ldd evaluate | grep opencv ,我得到了以下內容。 這意味着項目仍然鏈接到系統版本,而不是我選擇的版本。

libopencv_highgui.so.3.0 => /usr/local/lib/libopencv_highgui.so.3.0 (0x00007efc72527000)
libopencv_imgcodecs.so.3.0 => /usr/local/lib/libopencv_imgcodecs.so.3.0 (0x00007efc7217a000)
libopencv_imgproc.so.3.0 => /usr/local/lib/libopencv_imgproc.so.3.0 (0x00007efc711f8000)
libopencv_core.so.3.0 => /usr/local/lib/libopencv_core.so.3.0 (0x00007efc70565000)

感謝你們對我的幫助!!!

PROJECT_NAME:= evaluate

# config ----------------------------------

INCLUDE_DIRS := include
LIBRARY_DIRS := lib

COMMON_FLAGS := -DCPU_ONLY
CXXFLAGS := -std=c++11 -fopenmp -D_GLIBCXX_USE_CXX11_ABI=0

LDFLAGS := -fopenmp -Wl,-rpath,./lib

OPENCV = `pkg-config opencv --cflags --libs`
LIB = $(OPENCV)
BUILD_DIR := build

# make rules -------------------------------
CXX ?= g++
BUILD_DIR ?= ./build

LIBRARIES += opencv_core opencv_highgui opencv_imgproc #opencv_imgcodecs

CXXFLAGS += $(COMMON_FLAGS) $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir))
LDFLAGS +=  $(COMMON_FLAGS) $(foreach includedir,$(LIBRARY_DIRS),-L$(includedir)) $(foreach library,$(LIBRARIES),-l$(library))
SRC_DIRS += $(shell find * -type d -exec bash -c "find {} -maxdepth 1 \( -name '*.cpp' -o -name '*.proto' \) | grep -q ." \; -print)
CXX_SRCS += $(shell find src/ -name "*.cpp")
CXX_TARGETS:=$(patsubst %.cpp, $(BUILD_DIR)/%.o, $(CXX_SRCS))
ALL_BUILD_DIRS := $(sort $(BUILD_DIR) $(addprefix $(BUILD_DIR)/, $(SRC_DIRS)))

.PHONY: all
all: $(PROJECT_NAME)

.PHONY: $(ALL_BUILD_DIRS)
$(ALL_BUILD_DIRS):
    @mkdir -p $@

$(BUILD_DIR)/%.o: %.cpp | $(ALL_BUILD_DIRS)
    @echo "CXX" $<
    @$(CXX) $(CXXFLAGS) -c -o $@ $<

$(PROJECT_NAME): $(CXX_TARGETS)
    @echo "CXX/LD" $@
    @$(CXX) -o $@ $^ $(LDFLAGS) $(LIB)

.PHONY: clean
clean:
    @rm -rf $(CXX_TARGETS)
    @rm -rf $(PROJECT_NAME)
    @rm -rf $(BUILD_DIR)

一種方法是修改下一行

INCLUDE_DIRS := ../../third_party/opencv/include/ include
LIBRARY_DIRS := ../../third_party/opencv/lib/ lib

或者第二種不同的方法是將-I-L選項添加到下一行

CXXFLAGS := -std=c++11 -fopenmp -D_GLIBCXX_USE_CXX11_ABI=0 -I../../third_party/opencv/include/
LDFLAGS := -fopenmp -Wl,-rpath,./lib -L../../third_party/opencv/lib/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM