我有一台可以编译代码的两台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

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

最佳答案

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

  • 将libwebp降级到0.4.4,并忽略libwebp 0.5.0-1,以避免在以后的升级中恢复原状。这可能不是最佳选择,但是它很容易并且可以工作,除非您拥有其他依赖于0.5.0-1的软件包。
  • 手动下载并构建0.4.4版本的libwebp,然后将其安装在非标准位置。在这种情况下,您将需要修改/使用LD_LIBRARY_PATH将opencv指向此处。这可能是您最简单的最佳选择。
  • 下载OpenCV源的一些最新版本并进行构建。如果兼容,它将找到并链接到您当前的libwep.so.6。兼容最新版本的OpenCV(在撰写本文时为3.1.0)。此选项是最好的选择,但编译OpenCV涉及最多,取决于您要包括的功能可能很琐碎或痛苦。

  • 现在,对您当前标记的解决方案发表评论:强烈建议不要从一个名称到另一个名称建立链接。在许多情况下,它不会编译,但即使编译,除非二进制文件完全兼容,否则您的应用程序可能会表现出任意和不稳定的行为和/或段错误。但是,如果它们兼容,则打包程序可能不会更改soname。如果这是用于学校项目,则可能没问题,但是,如果这是重要的事情,请不要这样做。

    希望这可以帮助。

    关于linux - OpenCV构建错误: libwebp.so not found,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34559185/

    10-11 19:11