Перед запуском я хотел бы указать там, на самом деле очень похожее (вероятно, точно идентичный) вопрос. Однако я не мог решить свою проблему, смотрящую на принятые ответы.
Я следовал инструкциям, предоставленным этим веб-сайтом для установки 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.
Короче говоря: Я решил проблему путем восстановления 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
вместо этого.
У меня было другое программное обеспечение, жалуются, что оно не находило спокойные файлы, и ПУТЬ был установлен к корректному каталогу bin, и LD_LIBRARY_PATH был установлен на корректный каталог lib. Проблема состояла в том, что ПУТЬ также не указал на включать каталог для QT. Я добавил и включать каталог и включать/QT каталог. Затем я работал, настраивают на opencv и делают. Затем моя программа смогла к компиляциям.