I am trying to make
a C++ program from a github repo. I have cloned the repo and cd into it. Per instructions, I run make
to build. Here is the original 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
When I run it, I get this error:
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
So I adjusted the -I include path to opencv to reflect where I have it installed on my machine. I have it installed here (and use it frequently in python):
Users/asi/anaconda3/pkgs/libopencv-3.4.2-h7c891bd_1/include/opencv2
With this, I made a new 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
but I still get this error:
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'm not sure what to do. I have all of the libraries installed in the path referenced by my -I call. Why can't make
find them?
For reference, I am running on a Mac (Catalina OS).