OpenCV неопределенные ссылки для libQt5Core.so.5

Перед запуском я хотел бы указать там, на самом деле очень похожее (вероятно, точно идентичный) вопрос. Однако я не мог решить свою проблему, смотрящую на принятые ответы.

Я следовал инструкциям, предоставленным этим веб-сайтом для установки OpenCV3 на Ubuntu 16.04. Я достиг точки, где я пытался скомпилировать тестовую программу (разделите 6) с g ++. Компиляция возвращает это:

/usr/bin/ld: warning: libicui18n.so.58, needed by //home/raggot/anaconda3/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libicuuc.so.58, needed by //home/raggot/anaconda3/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libicudata.so.58, needed by //home/raggot/anaconda3/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `u_errorName_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_setMillis_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_getAlias_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_inDaylightTime_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `u_strToLower_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_getStandardName_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `u_strToUpper_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_setSubstChars_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_getMaxCharSize_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_getTimeZoneDisplayName_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_fromUnicode_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_open_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_getDefaultName_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_getDefaultTimeZone_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_clone_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_getDSTSavings_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucol_strcoll_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_close_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_countAvailable_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_openCountryTimeZones_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucol_open_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_compareNames_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_close_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_getAvailableName_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_openTimeZoneIDEnumeration_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_open_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucol_setAttribute_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_openTimeZones_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `uenum_close_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_countAliases_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucol_close_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucol_getSortKey_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucal_get_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `uenum_next_58'
//home/raggot/anaconda3/lib/libQt5Core.so.5: undefined reference to `ucnv_toUnicode_58'
collect2: error: ld returned 1 exit status

Пытаясь применить это решение моей проблемы, я пытался локализовать путь установки Qt5 в моей системе. Я сделал это при помощи dpkg --listfiles libqt5core5a. Я добавил получающийся путь к LD_LIBRARY_PATH, но это не помогло.

Я пытался переустановить Qt5 sudo apt install qt5-default и также установленный qttools5-dev но это также не помогло.

Моя проблема могла бы иметь некоторое отношение к факту, компилятор пользуется библиотекой анаконды, в то время как я на самом деле работаю в глобальной среде. Еще некоторое исследование показало также что мое использование установки Qt5 apt install имеет версию 5.5.1, в то время как, если я ввожу qtdiag Я вижу, что версия 5.6.2 обнаруживается. Это могло быть то, потому что в какой-то момент я, возможно, установил Qt5 под анакондой также. Так, у меня могло бы быть 2 установки. Я не знаю, как проверить это все же.

Какова могла быть причина проблемы?

Править:

Благодаря комментариям я понял anaconda3 даже не должен быть в PATH во-первых. С некоторыми бездельничание я нашел, что оно было добавлено к пути при входе в систему в .bashrc, вероятно, потому что я спросил так во время установки Анаконды. Я удалил его и попытался make снова.

Это - то, что я теперь вижу (извлечение очень длинного вывода):

/usr/local/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_stdio_dest@LIBJPEG_9.0'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QGraphicsView::staticMetaObject@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QSize::scaled(QSize const&, Qt::AspectRatioMode) const@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QWidget::update()@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QWidget::paintEngine() const@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QAbstractSlider::setMinimum(int)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QCheckBox::minimumSizeHint() const@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QFileInfo::QFileInfo(QString const&)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QWidget::hideEvent(QHideEvent*)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QObject::connectNotify(QMetaMethod const&)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `non-virtual thunk to QBoxLayout::hasHeightForWidth() const@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QWidget::isFullScreen() const@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QWidget::hasHeightForWidth() const@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QStatusBar::showMessage(QString const&, int)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QObject::customEvent(QEvent*)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QObject::QObject(QObject*)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QFont::setLetterSpacing(QFont::SpacingType, double)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QGraphicsView::dragLeaveEvent(QDragLeaveEvent*)@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `typeinfo for QHBoxLayout@Qt_5'
/usr/local/lib/libopencv_highgui.so: undefined reference to `QGLWidget::~QGLWidget()@Qt_5'

Это заставляет меня думать, что я теперь просто пропускаю что-то в PATH.

Я нашел, где эти библиотеки определяются (в моей установке Qt5) в подпапках /usr/include/x86_64-linux-gnu/qt5/, и впоследствии добавил всех их к PATH посредством export команды в .profile, и затем выполненный source .profile. Если я теперь работаю echo $PATH Я вижу их всех на месте.

К сожалению, сообщение об ошибке является все еще тем же, если я работаю make команда.

Редактирование № 2:

После добавления всех подпапок, содержащих заголовки Qt5 к PATH, Я пытался добавить копию PATH в LD_LIBRARY_PATH путем выполнения

export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PATH

Еще раз однако сообщение об ошибке не изменилось по своей природе. Я действительно не понимаю, почему компилятор не видит библиотеки Qt5.

3
задан 17 March 2018 в 15:40

2 ответа

Короче говоря: Я решил проблему путем восстановления OpenCV с нуля. Кредит на это решение переходит к пользователю Tomáš Pospíšek.

Установка OpenCV полагалась на установку Python3 и пакеты Анаконды вместо корня. Неважно, содержание PATH, PYTHONPATH, или LD_LIBRARY_PATH, и независимо факт я переименовал anaconda папка к anaconda_renamed для предотвращения его когда-либо находимый сам OpenCV был создан для доверия пакетам Анаконды. Не удивительно, в этой точке они не были найдены.

Проблему не было легко решить, как, даже когда я пытался восстановить OpenCV с нуля с помощью стандарта cmake руководство по инсталляции OpenCV, Анаконда все еще оказалась в пути. Однако при помощи cmake-gui, и путем поиска anaconda в полях мне удалось найти, где это использовалось.

После нескольких попыток корректно решить эту проблему путем соединения полей cmake далеко от anaconda, и видя, как по умолчанию CMake продолжал находить пакеты Анаконды тут и там, я закончил тем, что удалил Анаконду из своей системы, вытянув последнюю версию opencv и opencv-contrib и инструкции по установке следующего OpenCV еще раз.

make процесс привел к некоторым ошибкам с некоторыми пакетами CUDA (что-то как cudaarithm и cudatest). Исключая их от использования сборки cmake-gui обработанный. Я надеюсь, что никогда не буду сожалеть об этих исключениях.

PS: если другие неудачные пользователи также найдут что их make -j4 управляйте результатами в процесс здания, застревающий в 99% в течение многих часов, попробуйте make -j1 вместо этого.

1
ответ дан 1 December 2019 в 17:28

У меня было другое программное обеспечение, жалуются, что оно не находило спокойные файлы, и ПУТЬ был установлен к корректному каталогу bin, и LD_LIBRARY_PATH был установлен на корректный каталог lib. Проблема состояла в том, что ПУТЬ также не указал на включать каталог для QT. Я добавил и включать каталог и включать/QT каталог. Затем я работал, настраивают на opencv и делают. Затем моя программа смогла к компиляциям.

0
ответ дан 1 December 2019 в 17:28

Другие вопросы по тегам:

Похожие вопросы: