miércoles, 27 de junio de 2012

Problema con Perl y la librería GD


El día de hoy estuve experimentando una serie de errores para poder instalar la libreria Image::Resize en perl, después de varios intentos y de encontrarme con mensajes que se exculpaban a si mismos, llegué a la siguiente conclusión:

Primero, el problema que tuve fue el siguiente:

Al querer instalar la librería Image::Resize desde cpan en perl, me tiró un error:

cpan> install Image::Resize

Can't locate object method "newFromJpeg" via package "GD::Image" at /usr/lib /perl5/site_perl/5.8.8/i386-linux-thread-multi/GD/Image.pm line 81.

Luego buscando por foros en internet decían que había que reinstalar el módulo GD y al querer hacer esto me tiraba el otro error cuando hacía el make test:

t/GD.t ........ 1/12 Can't load './blib/arch/auto/GD/GD.so' for module GD: libjpeg.so.8: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.

Ese error me decía que fuera a la línea 230 del archivo DynaLoader.pm y al ir allí me llevé la sorpresa del siguiente mensaje:

    # Many dynamic extension loading problems will appear to come from
    # this section of code: XYZ failed at line 123 of DynaLoader.pm.
    # Often these errors are actually occurring in the initialisation
    # C code of the extension XS file. Perl reports the error as being
    # in this perl code simply because this was the last perl code
    # it executed.

    my $libref = dl_load_file($file, $module->dl_load_flags) or
        croak("Can't load '$file' for module $module: ".dl_error());

Es decir, que el archivo que supuestamente daba el error no era el culpable de que otras librerías dinámicas lo mandaran llamar ¬¬ , y tenía razón, al leer por entre muchos foros llegué a la conclusión que lo que había que hacer era simplemente decirle a estas librerías que la libjpeg.so.8 se encontraba en otro directorio (/usr/local/lib), y a pesar de declararla dentro de @LIBS en el propio perl script, no funcionó, acudí al grandioso entorno, y la declaré como parte de sus variables, haciendo lo siguiente:

# LD_LIBRARY_PATH=/usr/local/lib; export LD_LIBRARY_PATH

Volví a compilar desde el directorio donde se encontraba el GD que en este caso es la version 2.46 haciendo lo siguiente en el directorio /root/.cpan/build/GD-2.46

# perl Makefile.PL
# make
# make test
# make install

Y voalá! Funcionó a la perfección.

No hay comentarios:

Publicar un comentario

Escribe tu comentario acerca de las dudas que tengas y yo te atenderé con gusto =)
GRACIAS