Ошибка связывания сборки OpenCV Contrib 4.5.4 с LibTiff4

Сценарий

У меня возникли проблемы с созданием последней версии кодовой базы OpenCV contrib из исходного кода, но проблема может просто лежать в основе более общего отсутствия глубины с моей стороны:

Извлекая тег 4.5.4 из официальных репозиториев, я использую инструкции по сборке в соответствии с официальными инструкциями по сборке OpenCV с его кодовой базой contrib отсюда, тогда как в настоящее время для последней версии OpenCV требуется libtiff версии 4, я использую упомянутый флаг cmake там для сборки самой libtiff версии 4 как части сборки OpenCV ― так что сборка OpenCV использует libtiff 4, а не библиотеку и заголовки Ubuntu 20.04 libtiff версии 5 по умолчанию.

Тем не менее, в определенный момент в сборке OpenCV кажется, что одна библиотека не может найти символы libtiff версии 4, а именно библиотека liblept:

      /usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFGetFieldDefaulted@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFCleanup@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFIsTiled@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFReadRGBAImageOriented@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFOpen@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFSetSubDirectory@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFSetField@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFCurrentDirOffset@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFWriteScanline@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFPrintDirectory@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFGetField@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFScanlineSize@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFSetWarningHandler@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFSetErrorHandler@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFSetDirectory@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFReadScanline@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFClose@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFClientOpen@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/liblept.so.5: undefined reference to `TIFFGetVersion@LIBTIFF_4.0'

Я получаю следующий вывод для этой библиотеки ―

      $ ldd /usr/lib/x86_64-linux-gnu/liblept.so.5
.
.
.
libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f40034c6000)

действительно у меня установлен libtiff5:

      $ apt list libtiff*
libtiff-dev/focal-updates,focal-security,now 4.1.0+git191117-2ubuntu0.20.04.2 amd64 
libtiff-dev/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 i386
libtiff-doc/focal-updates,focal-updates,focal-security,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 all
libtiff-opengl/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 amd64
libtiff-opengl/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 i386
libtiff-tools/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 amd64
libtiff-tools/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 i386
libtiff5-dev/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 amd64
libtiff5-dev/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 i386
libtiff5/focal-updates,focal-security,now 4.1.0+git191117-2ubuntu0.20.04.2 amd64 [installed]
libtiff5/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 i386
libtiffxx5/focal-updates,focal-security,now 4.1.0+git191117-2ubuntu0.20.04.2 amd64 [installed,automatic]
libtiffxx5/focal-updates,focal-security 4.1.0+git191117-2ubuntu0.20.04.2 i386

Глядя сюда, я немного озадачен таблицей, показывающей требования к версии libtiff5 как 4.8.3.

Вопрос

Означает ли это, что сборка в моей системе (насколько lddкоманда может означать) попытка связать liblept5 с libtiff5 при попытке разрешить эти символы libtiff4? Или он пытается разрешить их динамически и, таким образом, не может разрешить, поскольку в моей системе нет глобально доступной для компоновщика libtiff4?

Дополнительная информация о версии

  • Убунту 20.04
  • cmake 3.16.3
  • GNU Сделать 4.2.1
  • gcc 9.3.0

1 ответ

Эта проблема не воспроизводится при использовании OpenCV 4.2.0 для Ubuntu 20.04. Проблема сверху не возникает там. Вам также часто нужно помнить об использовании ―

      sudo ldconfig

После установки libs, если вы ожидаете сборки против них.

Тем не менее, мне интересно, можно ли рассмотреть последнее предложение моего вопроса, чтобы способствовать более тонкому пониманию в таком контексте, как тот, который изложен в заданном вопросе.

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