[英]How to link opencv lib in a given directory in makefile
I'm compiling a project and I want to link it to the opencv in a given directory, not the system directory like /usr/local/lib/libopencv
我正在编译一个项目,我想将它链接到给定目录中的 opencv,而不是像/usr/local/lib/libopencv
这样的系统目录
In the end is the default makefile, which links to the system directory /usr/local/lib
.最后是默认的 makefile,它链接到系统目录/usr/local/lib
。
The opencv I want to link is located in directory ../../third_party/opencv/
, with ../../third_party/opencv/include/
and ../../third_party/opencv/lib/
.我要链接的 opencv 位于目录../../third_party/opencv/
,带有../../third_party/opencv/include/
和../../third_party/opencv/lib/
。 The absolute path is /home/somepath/third_party/opencv/
.绝对路径是/home/somepath/third_party/opencv/
。
How shall I modify the makefile
to have the project link to the opencv I want to use, instead of the system version?我应该如何修改makefile
以将项目链接到我想要使用的 opencv,而不是系统版本?
Currently, when I compile the project and use ldd
to check its dependency, say ldd evaluate | grep opencv
目前,当我编译项目并使用ldd
检查其依赖项时,请说ldd evaluate | grep opencv
ldd evaluate | grep opencv
, I got the following. ldd evaluate | grep opencv
,我得到了以下内容。 It means the project still links to the system version, not my chosen one.这意味着项目仍然链接到系统版本,而不是我选择的版本。
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)
Thank you for helping me!!!感谢你们对我的帮助!!!
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)
One way is to modify next lines一种方法是修改下一行
INCLUDE_DIRS := ../../third_party/opencv/include/ include
LIBRARY_DIRS := ../../third_party/opencv/lib/ lib
Or second different way is to add -I
and -L
options to next lines或者第二种不同的方法是将-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.