【发布时间】:2020-12-24 00:52:50
【问题描述】:
我正在尝试 make 来自 github 存储库的 C++ 程序。我已经将 repo 和 cd 克隆到其中。根据说明,我运行make 进行构建。这是原始的 Makefile:
# Makefile for heartbeat
appname := Heartbeat
CXX := g++
RM := rm -f
CXXFLAGS := -Wall -g -std=c++11 -I/usr/local/include/opencv4
LDFLAGS := -g
LDLIBS := -lopencv_core -lopencv_dnn -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_objdetect -lopencv_video -lopencv_videoio
SRCS := $(shell find . -name "*.cpp")
OBJS = $(subst .cpp,.o,$(SRCS))
all: $(appname)
$(appname): $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $(appname) $(OBJS) $(LDLIBS)
depend: .depend
.depend: $(SRCS)
$(RM) ./.depend
$(CXX) $(CXXFLAGS) -MM $^>>./.depend;
clean:
$(RM) $(appname) $(OBJS)
dist-clean: clean
$(RM) *~ .depend
include .depend
当我运行它时,我得到了这个错误:
g++ -Wall -g -std=c++11 -I/usr/local/include/opencv4 -g -o Heartbeat ./RPPG.o ./Heartbeat.o ./opencv.o -lopencv_core -lopencv_dnn -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lobjdetect -lopencv_video -lopencv_videoio
ld: library not found for -lopencv_core
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Heartbeat] Error 1
所以我调整了 opencv 的 -I include 路径,以反映我在机器上安装它的位置。我在这里安装了它(并在 python 中经常使用它):
Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include/opencv2
有了这个,我制作了一个新的 Makefile:
# Makefile for heartbeat
appname := Heartbeat
CXX := g++
RM := rm -f
CXXFLAGS := -Wall -g -std=c++11 -I/Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include
LDFLAGS := -g
LDLIBS := -lopencv_core -lopencv_dnn -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lobjdetect -lopencv_video -lopencv_videoio
SRCS := $(shell find . -name "*.cpp")
OBJS = $(subst .cpp,.o,$(SRCS))
all: $(appname)
$(appname): $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $(appname) $(OBJS) $(LDLIBS)
depend: .depend
.depend: $(SRCS)
$(RM) ./.depend
$(CXX) $(CXXFLAGS) -MM $^>>./.depend;
clean:
$(RM) $(appname) $(OBJS)
dist-clean: clean
$(RM) *~ .depend
include .depend
但我仍然收到此错误:
g++ -Wall -g -std=c++11 -I/Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include -c -o Heartbeat.o Heartbeat.cpp
g++ -Wall -g -std=c++11 -I/Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include -c -o opencv.o opencv.cpp
g++ -Wall -g -std=c++11 -I/Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include -g -o Heartbeat ./RPPG.o ./Heartbeat.o ./opencv.o -lopencv_core -lopencv_dnn -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lobjdetect -lopencv_video -lopencv_videoio
ld: library not found for -lopencv_core
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Heartbeat] Error 1
我不知道该怎么办。我将所有库都安装在我的 -I 调用引用的路径中。为什么make 找不到?
作为参考,我在 Mac (Catalina OS) 上运行。
【问题讨论】:
-
您需要使用
-L设置库文件夹的位置,类似于您使用-I添加包含路径的方式 -
你使用 homebrew 吗?
-
@MarkSetchell 是的。我想我是通过 pip 或 conda 安装 cv2 的。我应该通过 brew 安装吗?
-
@drescherjm 喜欢这样吗?
g++ -Wall -g -std=c++11 -I/Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include -L/Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include -g -o Heartbeat ./RPPG.o ./Heartbeat.o ./opencv.o -lopencv_core -lopencv_dnn -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lobjdetect -lopencv_video -lopencv_videoio。我仍然遇到同样的错误。 -
-L/Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include类似,但我认为 opencv 库的 .a 或 .so 文件不在此文件夹中。您需要使用正确的路径。
标签: python c++ opencv gcc makefile