• Publicidad

Error en Embedded Perl en C++

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Error en Embedded Perl en C++

Notapor Vertik » 2011-09-05 09:41 @445

¡Hola a todos!

Espero que el verano bien :D

Bueno, aquí vuelta al trabajo y ¡me he encontrado con una dificultad! Suerte de vosotros ¡je,je,je!

Esta es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Can't load module HTML::Parser, dynamic loading not available in this perl.
  (You may need to build a new perl executable which either supports
  dynamic loading or has the HTML::Parser module statically linked into it.)
 at /usr/local/lib/perl/5.10.1/HTML/Entities.pm line 154
Compilation failed in require at /usr/local/lib/perl/5.10.1/HTML/Entities.pm line 154.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Estoy lanzando un código Perl (funciona) desde C++ y surge este error. Es como si no supiera linkar este módulo.

¿Alguna sugerencia? :(


Gracias
Vertik
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-04-20 06:32 @314

Publicidad

Re: Error en Embedded Perl en C++

Notapor explorer » 2011-09-05 10:02 @460

JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Error en Embedded Perl en C++

Notapor Vertik » 2011-09-06 05:34 @273

¡¡¡Gracias, explorer!!!

Como bien dices, aparece en esa web.

Lo explicare por aquí si os parece bien (por si alguien llega al foro y ve la pregunta). (Nota: mi nivel no es alto, así que seguro que habrá una manera más fácil de hacerlo.)

Lo que he hecho para solucionar el problema es crear el fichero:

xsinit.cpp
Sintáxis: [ Descargar ] [ Ocultar ]
Using cpp Syntax Highlighting
  1. EXTERN_C void
  2. xs_init(pTHX)
  3. {
  4.         char *file = __FILE__;
  5.         dXSUB_SYS;
  6.  
  7.         /* DynaLoader is a special case */
  8.         newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
  9. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Con su header xsinit.h
Sintáxis: [ Descargar ] [ Ocultar ]
Using cpp Syntax Highlighting
  1. #include <EXTERN.h>
  2. #include <perl.h>
  3.  
  4. EXTERN_C void xs_init (pTHX);
  5.  
  6. EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Luego en la llamada para introducir los parámetros necesarios para ejecutar el Perl desde C, se modifica:

perl_parse(my_perl, NULL, argc, my_argv,NULL);

por

perl_parse(my_perl, xs_init, argc, my_argv,NULL);

xs_init() realiza "magia" (indica al intérprete de Perl cómo linkar los ficheros a usar) y el error desaparece y ya puedes usar normalmente el use "Modulo::X".

¡Espero que sea de ayuda a todos!

¡Mil gracias, explorer!
Vertik
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-04-20 06:32 @314


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados