2011-04-04 19 views
7

Tengo una aplicación que depende de una gran cantidad de bibliotecas (no todos). La mayoría de estas bibliotecas se instalan a través del administrador de paquetes. Para los que no lo son, los he vuelto a compilar, pero sigo teniendo el mismo error de incompatibilidad de libpng.libpng advertencia: versión de libpng incompatible en la aplicación y la biblioteca

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 

Es un error porque el búfer resultante está vacío. ¿Cómo puedo saber qué biblioteca está enlazando con la nueva y qué biblioteca está enlazando con la anterior?

ldd <executable-name> 

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

Correr locate png.h me da un par de archivos del sistema

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

todos los cuales están 1.2.44.

Estoy ejecutando Ubuntu 11.04 x86-64.

ACTUALIZACIÓN: Resulta que OpenCV barcos con su propia versión de libpng 1.4.3 cuales es

+0

Qué plataforma local/lib? –

+2

@Dat Chu - Estoy enfrentando el mismo problema, ya que descubrió que OpenCV envía su propia versión de libpng, ¿qué debo hacer para compilar mi código correctamente? ¿Cuál de las siguientes 2 sugerencias siguió? ¡gracias por tu ayuda! – Matteo

Respuesta

4

Parece que su aplicación es vincular dinámicamente un archivo de biblioteca .so instalado en algún lugar que no sea el encabezado que está utilizando. Puede ldd <binary> averiguar qué .so está recuperando su binario, y luego tomar el archivo de encabezado de ese directorio (a menos que sea un directorio del sistema) en lugar del que está usando. Para ello, cambie su indicador -I en tiempo de compilación. De lo contrario, creo que necesitarás instalar libpng-1.4.3 para que puedas compilar contra sus encabezados.

0

Como se indicó en su pregunta, OpenCV hace con su propia versión de libpng, pero puede optar por utilizar la versión de libpng instalada en su sistema. Solo puede hacer esto al compilar OpenCV desde el origen: deshabilite BUILD_PNG al ejecutar cmake.

1

Mark B ya lo explicó. ahora de nuevo para Matteo

su enlazador recoge la primera aparición de libpng. que parece estar anidado en OpenCV. Eche un vistazo en su Makefile y ponga su versión local antes de incluya OpenCV en el Includes. En mi caso:

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

Cuestiones relacionadas