Не визначені посилання OpenCV для libQt5Core.so.5


3

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

Я дотримувався вказівок цього веб-сайту щодо встановлення 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, ймовірно, тому, що я просив цього під час встановлення Anaconda. Я її зняв і спробував 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.


Лінк шукає libicui18n.so.58, libicuuc.so.5 та libicudata.so.58, але не знаходить їх. Якщо у вас їх не встановлено, вам потрібно буде це зробити. Якщо ви вже встановлювали їх, то вам необхідно повідомити компонувальнику , як знайти їх, розширюючи шлях линкер навантаження , як тут: stackoverflow.com/a/40327731/4640820
Томаш Pospíšek

@ TomášPospíšek, дякую за вклад. Я не думаю, що це ті бібліотеки, тому що я перевірив makeжурнал помилок darknet і він не посилається на них (я відредагував своє запитання, щоб поширити інформацію там). Я думаю, що шлях відсутній або неправильний, але я не знаю, як це перевірити чи виправити. Чи є у вас якісь пропозиції щодо того, як я можу дізнатися, який саме шлях я маю надати та де?
raggot

Якщо ви хочете, щоб це замість переповнення стека , просто видаліть його і переставте туди. Це краще, ніж все-таки мігрувати, оскільки таким чином питання з’явиться як щойно задане в SO.
тердон

1
"Отже, у мене можуть бути дві установки. Я не знаю, як це перевірити." -> Ви можете використовувати find / -name 'libqt*'. Також ви можете робити «qtdiag» і ldd $(which qtdiag).
Tomáš Pospíšek

@ TomášPospíšek, велике спасибі за пропозиції! Я думаю, що which qtdiagпривів мене в правильне русло. Відповідь - /home/raggot/anaconda3/bin/qtdiagде я б очікував чогось на рівні кореня /usr/lib/x86_64-linux-gnu/qt5/. Це зміцнює моє відчуття make, дивлячись у неправильному місці. У будь-якому випадку, я намагався додати папки я отримав , використовуючи findдля LD_LIBRARY_PATHі спробував makeзнову, але не пощастило :(
raggot

Відповіді:


1

Якщо коротко: я вирішив проблему, відновивши OpenCV з нуля. Заслуга за це рішення належить користувачеві Tomáš Pospíšek .

Установка OpenCV спиралася на встановлення Python3 та пакети Anaconda замість root. Незалежно від того , змісту PATH, PYTHONPATHабо LD_LIBRARY_PATH, і незалежно той факт , я перейменував anacondaпапку , anaconda_renamedщоб уникнути його коли - небудь знайдене, сам OpenCV було побудовано , щоб покладатися на пакетах Anaconda. Не дивно, що в цей момент їх не знайшли.

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

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

makeПроцес привів до деяких помилок з деякими пакетами CUDA (що - щось на зразок cudaarithmі cudatest). Виключення їх із збірки за допомогою cmake-guiвідпрацьованих. Сподіваюся, я ніколи не пошкодую про ці виключення.

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


0

У мене було інше програмне забезпечення, яке скаржилося, що не знаходило файлів qt, і PATH був встановлений у правильному каталозі бін, і LD_LIBRARY_PATH був встановлений у правильній директорії lib. Проблема полягала в тому, що PATH також не вказував на каталог включення для QT. Я додав і каталог включення, і каталог include / Qt. Потім я запустив конфігурацію на opencv і зробив. Тоді моя програма змогла складати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.