【问题标题】:OpenCV build Error: libwebp.so not foundOpenCV 构建错误:找不到 libwebp.so
【发布时间】:2016-04-06 04:17:31
【问题描述】:

我有两台 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 文件中的某些内容?

【问题讨论】:

    标签: linux qt opencv compiler-errors


    【解决方案1】:

    看起来您安装的 OpenCV 版本希望与旧版本的 libwebp(特别是包含 libwebp.so.5 的版本 0.4.4)链接,而不是您安装的版本(可能是版本 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 可能是微不足道的或痛苦的,具体取决于您想要包含的功能。

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

    希望这会有所帮助。

    【讨论】:

    • 我更新了 OpenCV,我想问题解决了 :-)
    【解决方案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
    

    【讨论】:

    • Phewww,10 倍男人!试图欺骗它几个小时!现在开始了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-12-30
    相关资源
    最近更新 更多