Предупреждение libpng: несовместимая версия libpng в приложении и библиотеке - PullRequest
7 голосов
/ 05 апреля 2011

У меня есть приложение, которое зависит от множества библиотек (не мы все). Большинство этих библиотек устанавливаются через менеджер пакетов. Для тех, которые не являются, я перекомпилировал их, но я все еще получаю ту же ошибку несовместимости libpng.

libpng warning: Application was compiled with png.h from libpng-1.2.44
libpng warning: Application  is  running with png.c from libpng-1.4.3

Это ошибка, потому что результирующий буфер пуст. Как мне узнать, какая библиотека ссылается на новую, а какая библиотека ссылается на старую?

ldd <executable-name>

...
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f5a0660f000)
...

Запуск locate png.h дает мне пару файлов системного уровня

/usr/include/png.h
/usr/include/libpng12/png.h

Все из которых 1.2.44.

Я использую Ubuntu 11.04 x86-64.

ОБНОВЛЕНИЕ: Оказывается, OpenCV поставляется с собственной версией libpng, которая является 1.4.3

Ответы [ 4 ]

4 голосов
/ 05 апреля 2011

Похоже, что ваше приложение динамически связывает библиотечный файл .so, установленный где-то, кроме используемого вами заголовка.Вы можете ldd <binary> выяснить, какой .so ваш двоичный файл получает, а затем извлечь файл заголовка из этого каталога (если это не системный каталог) вместо того, который вы используете.Вы сделаете это, изменив свой флаг -I во время компиляции.В противном случае, я думаю, вам нужно установить libpng-1.4.3, чтобы вы могли компилировать его заголовки.

1 голос
/ 23 мая 2013

Марк Б уже объяснил это. теперь снова за Маттео

ваш компоновщик подхватывает первое появление libpng. который кажется вложенным в OpenCV. Загляните в ваш Makefile и поместите локальную версию перед Включение OpenCV во Включает. В моем случае:

-I / usr / include / libpng12 -lpng12 [...] -L / usr / local / lib -lopencv_core

0 голосов
/ 14 марта 2019

причина: OpenCV / CMakeLists.txt файл:

OCV_OPTION(BUILD_PNG   "Build libpng from source"   WIN32 OR ANDROID OR APPLE)

enter image description here

.используйте этот параметр:

cmake -D BUILD_PNG=ON (+your other params)
make
sudo make install
0 голосов
/ 12 ноября 2012

Как указано в вашем вопросе, OpenCV поддерживает с собственной версией libpng, но вы можете вместо этого использовать версию libpng, установленную в вашей системе.Вы можете сделать это только при сборке OpenCV из исходного кода: отключите BUILD_PNG при запуске cmake.

...