加载共享库时出现 C++ 错误:libopencv_ximgproc.so.4.4

C++ error while loading shared libraries: libopencv_ximgproc.so.4.4

我最近用一些贡献的模块构建了 OpenCV 4.4,但我不能从 C++ 调用它们。

我做了什么

来自 make install 输出:

...
-- Installing: /usr/local/lib/libopencv_ximgproc.so.4.4
-- Set runtime path of "/usr/local/lib/libopencv_ximgproc.so.4.4.0" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_ximgproc.so
-- Installing: /usr/local/include/opencv4/opencv2/ximgproc.hpp
---

当我ls检查文件是否存在时:

ls /usr/local/lib/libopencv_ximgproc.so.4.4
> /usr/local/lib/libopencv_ximgproc.so.4.4

但是当我在 g++ 中编译我的代码时:

OBJS=frame_extractor.o
BIN=g++ frame_extraction.cpp
CFLAGS+=-Wfatal-errors
LDFLAGS+=-L/opt/vc/lib/ -lpthread
LDFLAGS+=-L/usr/local/lib/ -lopencv_ximgproc
LDFLAGS+=`pkg-config --cflags --libs opencv4`

$(BIN) $(CFLAGS) $(LDFLAGS) $(RPATH) $(INCLUDES) -o $(OBJS)

并编译我的程序,其中包括以下内容:

#include "opencv2/opencv.hpp"
#include "opencv2/ximgproc.hpp"

我得到标题中的错误。

问题

为什么我不能抢到这个图书馆?我可以检查的符号链接有什么有趣的事情吗?我是否漏掉了一些明显的东西?

我试过的

  1. g++
  2. 中的显式路径

我试图将 rpath 添加到我的 Makefile,但这没有帮助。

RPATH+=-Wl,-rpath=/usr/local/lib/libopencv_ximgproc.so.4.4
  1. 令人困惑的图书馆名称

我还检查了代码调用的是 ximgproc 而不是 imgproc,一个类似的标题 header。

  1. 检查库是否有内容

运行:

cat /usr/local/lib/libopencv_ximgproc.so.4.4

将通常的 gobbledygook 输出到人们可能期望从二进制文件中得到的终端。

一夜好眠后,我发现安装库后我没有运行 ldconfig。我 运行 那个,OP 中的问题就消失了。