Antes de começar, gostaria de salientar que, na verdade, existe uma pergunta (semelhante, provavelmente idêntica) . No entanto, não consegui resolver meu problema olhando para as respostas aceitas.
Eu segui as instruções fornecidas por este site para instalar o OpenCV3 no Ubuntu 16.04. Cheguei ao ponto em que tentei compilar um programa de teste (seção 6) com g ++. A compilação retorna isso:
/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
Tentando aplicar esta resposta ao meu problema, tentei localizar o caminho de instalação do Qt5 no meu sistema. Eu fiz isso usando dpkg --listfiles libqt5core5a
. Eu adicionei o caminho resultante a LD_LIBRARY_PATH
, mas isso não ajudou.
Eu tentei reinstalar o Qt5 por sudo apt install qt5-default
e também instalei qttools5-dev
, mas também não ajudou.
Meu problema pode ter algo a ver com o fato do compilador estar usando a biblioteca do anaconda, enquanto eu estou realmente trabalhando no ambiente global. Mais algumas pesquisas mostraram também que minha instalação do Qt5 usando apt install
tem a versão 5.5.1, enquanto que se eu digitar qtdiag
, eu vejo a versão 5.6.2 aparecer. Isso pode ser porque em algum momento eu poderia ter instalado o Qt5 no anaconda também. Então, eu posso ter duas instalações. Eu não sei como verificar isso.
Qual poderia ser a causa do problema?
Editar:
Graças aos comentários, percebi que anaconda3
nem deveria estar no PATH
em primeiro lugar. Com algum hacking por aí, descobri que ele foi adicionado ao caminho no login em .bashrc
, provavelmente porque eu pedi isso durante a instalação do Anaconda. Eu removi e tentei make
novamente.
Isto é o que vejo agora (extrair uma saída muito longa):
/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'
Isso me faz pensar que agora sinto falta de algo no PATH
.
Descobri onde essas bibliotecas estão definidas (na minha instalação do Qt5) nas subpastas de /usr/include/x86_64-linux-gnu/qt5/
e, posteriormente, adicionei todas elas a PATH
por meio dos comandos export
em .profile
e, em seguida, executamos %código%. Se eu executar agora source .profile
, vejo todos eles no lugar.
Infelizmente, a mensagem de erro ainda é a mesma se eu executar o comando echo $PATH
.
Editar # 2:
Depois de adicionar todas as subpastas contendo os cabeçalhos de Qt5 a make
, tentei adicionar uma cópia de PATH
em PATH
fazendo
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PATH
Mais uma vez, no entanto, a mensagem de erro não mudou na natureza. Eu realmente não entendo porque o compilador não vê as bibliotecas do Qt5.