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.
Can't locate object method "newFromJpeg" via package "GD::Image" at /usr/lib /perl5/site_perl/5.8.
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());
# 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
# make
# make test
# make install
Y voalá! Funcionó a la perfección.
Comentarios
Publicar un comentario
Escribe tu comentario acerca de las dudas que tengas y yo te atenderé con gusto =)
GRACIAS