Ioannis Mavroidis <[EMAIL PROTECTED]> writes:
>I'm running Perl 5.6.0 on SunOS 5.7 and I get the following compilation
>error,
>when I'm trying to embed a Perl interpreter in a C program.
>
>gcc test.c -L/usr/local/lib 
>/usr/local/lib/perl5/5.6.0/sun4-solaris-thread/auto/DynaLoader/DynaLoader.a
>-L/usr/local/lib/perl5/5.6.0/sun4-solaris-thread/CORE -lperl -lsocket
>-lnsl -ldl -lm -lposix4 -lpthread -lc -lcrypt -lsec -D_REENTRANT
>-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 
>-I/usr/local/lib/perl5/5.6.0/sun4-solaris-thread/CORE
>test.c: In function `perl_init':
>test.c:15: `thr' undeclared (first use in this function)
>test.c:15: (Each undeclared identifier is reported only once
>test.c:15: for each function it appears in.)
>test.c: In function `PLI_call':
>test.c:30: `thr' undeclared (first use in this function)

Why have you got a threaded perl?

>
>The flags I'm passing to gcc are the output of
>"perl -MExtUtils::Embed -e ccopts -e ldopts".
>
>These are the failing lines of test.c:
>
>      7 void perl_init () {
>      8     char *args[] = { "perl", "-e", "exit;" };
>      9     printf("C: Initializing Perl interpreter\n");
>     10 
>     11     my_perl = perl_alloc();
>     12     perl_construct(my_perl);
>     13 
>     14     perl_parse (my_perl, NULL, 3, args, (char **)NULL);
>     15     perl_eval_pv ("require 'test.pl';", TRUE);
>     16 }
>
>Can anyone see what the problem is?

Seems perl_eval_pv needs a thread argument in a threaded perl.

So you need to do _something_ (I am not sure what) to set up the thread
pointer - but you should be able to cheat and create a scope and 
get perl to find it for you:

     perl_parse (my_perl, NULL, 3, args, (char **)NULL);
     {
      dTHX;
      perl_eval_pv ("require 'test.pl';", TRUE);
     }


-- 
Nick Ing-Simmons

Reply via email to