python - make 在 make 调用期间找不到 OpenCV 库

标签 python c++ opencv gcc makefile

我正在尝试 make来自 github 存储库的 C++ 程序。我已经将 repo 和 cd 克隆到其中。根据说明,我运行 make build 。这是原始的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
所以我调整了 -I include path to opencv 以反射(reflect)我在我的机器上安装它的位置。我在这里安装了它(并在 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)上运行。

最佳答案

自制 或多或少总是符号链接(symbolic link)它安装的所有二进制文件:

/usr/local/Cellar/PACKAGENAME/PACKAGEVERSION
/usr/local/bin
所以你只需要/usr/local/bin在您的 PATH 上,您将获得所有 的最新二进制文件自制 包。那么,让我们看看pdfimages我用 安装的自制 :
ls -l /usr/local/bin/pdfimages
lrwxr-xr-x   1 mark  admin        38 Jul 14 15:54 pdfimages -> ../Cellar/poppler/0.90.1/bin/pdfimages

同样,它将所有头文件放入
/usr/local/include
和所有图书馆
/usr/local/lib
所以您通常只需要以下内容即可编译:
g++ -std=c++XX source.cpp -I /usr/local/include -L /usr/local/lib -lXXX -lYYY -lZZZ -o program

如果做不到这一点,只需使用 find 查找您的库然后设置-L XXX因此:
# Look for OpenCV libraries in /usr, /opt and $HOME
find /usr /opt $HOME -type f -iname "*opencv*so" 2> /dev/null

或者,您可以使用 pkgconfighere. 描述的方式完全相同

关于python - make 在 make 调用期间找不到 OpenCV 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63746424/

相关文章:

python - 为什么 `py.test --last-failed` 会跳过许多测试,尽管之前没有测试失败?

python - Pandas 数据透视表手动对列进行排序

python - django-cart 还是 Satchmo?

c++ - 我可以获得opencv grabcut函数的轮廓吗?

visual-c++ - cvShowImage我的图像颜色已更改

python - 将 Pandas 数据框中的数据分箱成间隔

c++ - C++ 中基类指针引用的对象的打印类型?

c++ - constexpr 和模板编译时间?

java - 线程 "main"java.lang.NoClassDefFoundError : org/opencv/core/Core 中的异常

c++ - 关于右值的范围和内存泄漏