Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在makefile中的给定目录中链接opencv库_C++_Opencv_Makefile - Fatal编程技术网

C++ 如何在makefile中的给定目录中链接opencv库

C++ 如何在makefile中的给定目录中链接opencv库,c++,opencv,makefile,C++,Opencv,Makefile,我正在编译一个项目,我想将它链接到给定目录中的opencv,而不是像/usr/local/lib/libopencv这样的系统目录 最后是默认的makefile,它链接到系统目录/usr/local/lib 我要链接的opencv位于目录。/../third\u party/opencv/,带有。/../third\u party/opencv/include/和。/../third\u party/opencv/lib/。绝对路径是/home/somepath/third\u party/op

我正在编译一个项目,我想将它链接到给定目录中的opencv,而不是像
/usr/local/lib/libopencv这样的系统目录

最后是默认的makefile,它链接到系统目录
/usr/local/lib

我要链接的opencv位于目录
。/../third\u party/opencv/
,带有
。/../third\u party/opencv/include/
。/../third\u party/opencv/lib/
。绝对路径是
/home/somepath/third\u party/opencv/

如何修改
makefile
,使项目链接到我想要使用的opencv,而不是系统版本

目前,当我编译项目并使用
ldd
检查其依赖性时,比如说
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:=包括
库目录:=lib
公共_标志:=-仅限DCPU_
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\u DIR:=构建
#制定规则-------------------------------
CXX?=g++
生成目录?=/生成
库+=opencv_核心opencv_highgui opencv_imgproc#opencv_imgcodecs
CXXFLAGS+=$(通用标志)$(foreach includedir,$(INCLUDE DIRS),-I$(includedir))
LDFLAGS+=$(通用标志)$(foreach includedir,$(LIBRARY\u 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'\)\124; grep-q.\;-print)
CXX_SRCS+=$(shell查找src/-name“*.cpp”)
CXX_目标:=$(patsubst%.cpp,$(BUILD_DIR)/%.o,$(CXX_SRCS))
所有构建目录:=$(排序$(构建目录)$(添加前缀$(构建目录)/,$(SRC目录)))
冒牌货:全部
全部:$(项目名称)
.PHONY:$(所有建筑)
$(所有构建目录):
@mkdir-p$@
$(生成目录)/%.o:%.cpp$(所有生成目录)
@回声“CXX”$<
@$(CXX)$(CXXFLAGS)-c-o$@$<
$(项目名称):$(CXX\U目标)
@回显“CXX/LD”$@
@$(CXX)-o$@$^$(LDFLAGS)$(库)
.假冒:干净
清洁:
@rm-rf$(CXX\U目标)
@rm-rf$(项目名称)
@rm-rf$(构建目录)

一种方法是修改下一行

INCLUDE_DIRS := ../../third_party/opencv/include/ include
LIBRARY_DIRS := ../../third_party/opencv/lib/ lib
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/
或者第二种不同的方法是在下一行中添加
-I
-L
选项

INCLUDE_DIRS := ../../third_party/opencv/include/ include
LIBRARY_DIRS := ../../third_party/opencv/lib/ lib
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/

嗯。。。这似乎不起作用。我两个都试过了。汇编成功了。但当我检查它的依赖关系时,它仍然链接到系统版本。@pfc您是否尝试从头开始重建项目?因为它可能重用了当前的构建选项或文件。删除所有生成临时文件。此外,您的include和libraries路径可能不正确。例如,也许你需要提供完整的绝对路径而不是相对路径,试试吧!因为若您的路径不正确,那个么构建系统会以静默方式返回到系统路径版本。