OpenCV构建错误:找不到libwebp.so

时间:2016-01-01 19:14:08

标签: linux qt opencv compiler-errors

我有两台Arch Linux机器,我可以编译我的代码,但在我的新机器上,我收到以下错误:

:-1: warning: libwebp.so.5, needed by /usr/local/lib/libopencv_imgcodecs.so, not found (try using -rpath or -rpath-link)
/usr/local/lib/libopencv_imgcodecs.so:-1: error: undefined reference to `WebPEncodeBGRA'
/usr/local/lib/libopencv_imgcodecs.so:-1: error: undefined reference to `WebPDecodeBGRAInto'
/usr/local/lib/libopencv_imgcodecs.so:-1: error: undefined reference to `WebPEncodeLosslessBGR'
/usr/local/lib/libopencv_imgcodecs.so:-1: error: undefined reference to `WebPDecodeBGRInto'
/usr/local/lib/libopencv_imgcodecs.so:-1: error: undefined reference to `WebPEncodeLosslessBGRA'
/usr/local/lib/libopencv_imgcodecs.so:-1: error: undefined reference to `WebPGetFeaturesInternal'
/usr/local/lib/libopencv_imgcodecs.so:-1: error: undefined reference to `WebPEncodeBGR'
:-1: error: collect2: error: ld returned 1 exit status

我的.pro文件如下所示:

#-------------------------------------------------
#
# Project created by QtCreator 2015-11-15T16:30:56
#
#-------------------------------------------------

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = ColonyCounter
TEMPLATE = app

CONFIG += c++11

INCLUDEPATH += /usr/local/include/opencv
LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc

SOURCES += main.cpp\
        mainwindow.cpp \
    cellcounter.cpp

HEADERS  += mainwindow.h \
    cellcounter.h

FORMS    += mainwindow.ui

DISTFILES += \
    to-do.txt

我如何链接库或类似的东西,没有在网络上找到任何知道的东西。 我检查了我的libs,发现我没有libwep.so.5但libwebp.so.6和libwebp.so以及libwebp.so.2,但我不知道如何修复它,安装libwebp.so .5或更改我的.pro文件中的内容?

2 个答案:

答案 0 :(得分:3)

看起来您安装的OpenCV版本想要链接旧版本的libwebp(特别是版本0.4.4,其中包含libwebp.so.5),而不是您安装的版本(可能是版本0.5.0-1)。一些选项是:

  1. 将libwebp降级到0.4.4并忽略libwebp 0.5.0-1以避免在将来升级时恢复。这可能不是最佳选择,但除非你有其他依赖于0.5.0-1的软件包,否则它很容易并且可以工作。
  2. 手动下载并构建0.4.4版本的libwebp并安装在非标准位置。在这种情况下,您需要修改/使用LD_LIBRARY_PATH指向opencv。这可能是您最简单的最佳选择。
  3. 下载更新版本的OpenCV源并构建它。它会找到并链接到您当前的libwep.so.6,如果它是兼容的。最新版本的OpenCV(截至本文编写3.1.0)兼容。这个选项是最好的选择,但是编译OpenCV最复杂的选择可能是微不足道或痛苦的,这取决于你想要包含的功能。
  4. 现在有关您当前标记的解决方案的评论:强烈建议不要将其从一个soname链接到另一个。在许多情况下,它不会编译,但即使这样,您的应用程序也可能表现出任意和不稳定的行为和/或段错误,除非二进制文件完全兼容。但如果他们兼容,打包者可能不会改变声纳。如果这是一个学校项目,你可能没问题,但如果这是重要的事情,不要这样做。

    希望这有帮助。

答案 1 :(得分:2)

我用一个不太优雅的解决方案解决了这个问题: 我刚刚创建了一个符号链接:

$ file libwebp.so.5
libwebp.so.5: symbolic link to libwebp.so.6.0.0

使用:

ln /usr/lib/libwebp.so.6 /usr/lib/libwebp.so.5