Dan Muey wrote:
[snip]
>
> perlemb.c:18: macro `SvPV' used with just one arg
>
> So I tried it as
> printf("%s", SvPV(eval_pv(perlcode),n_a));
> Which is how it was in another example and got:
you don't need to supply n_a if you are not intested in the length of the
SV, Perl has another api for that: SvPV_nolen. i am not sure how you can
compile eval_pv without the error flag, i would write the above as:
printf("%s",SvPV_nolen(eval_pv(perlcode,0)));
>
> perlemb.c: In function `main':
> perlemb.c:18: invalid type argument of `->'
> perlemb.c:18: invalid type argument of `->'
> perlemb.c:18: invalid type argument of `->'
> perlemb.c:18: warning: passing arg 1 of `Perl_sv_2pv' makes pointer from
> integer without a cast
which line is 18? what version of xssubpp are you using? the following
should tell you that:
[panda]# perl ${PATH}/xsubpp -v
finally, i am VERY surprise that your code:
>const char *perlcode = "use CGI 'header';print header();print 'hello
World';";
will work at all. the reason being is that the Perl interpreter you create
with:
> static PerlInterpreter *my_perl;
does NOT support dynamic loading. if the module that you are trying to use
is written entirely in Perl, it usually works but 'CGI' is not written
purely in Perl. any module that uses XS/C must be loaded up during start up
and the Perl interpreter you created does not support that. even if you can
compile your script, you will get a nasty error when you actually try to
run it. the error (depends on what version of xsubpp you are using) usually
tells you that CGI.pm can not found. the solution is to link a special file
after you create your interpreter. Embed.pm has a function for creating
this file:
[panda]# perl -MExtUtils::Embed -e xsinit
this will create a file perlxsi.c in the current directory. once you have
that, you need to link it against your object file and change:
> perl_parse(my_perl, NULL, argc, argv, (char **)NULL);
to:
perl_parse(my_perl, xs_init, argc, argv, (char **)NULL);
i omit a LOT of details but it's almost impossible to tell you everything
you need to know to successfully embed Perl in C with a single message.
david
--
s,.*,<<,e,y,\n,,d,y,.s,10,,s
.ss.s.s...s.s....ss.....s.ss
s.sssss.sssss...s...s..s....
...s.ss..s.sss..ss.s....ss.s
s.sssss.s.ssss..ss.s....ss.s
..s..sss.sssss.ss.sss..ssss.
..sss....s.s....ss.s....ss.s
,....{4},"|?{*=}_'y!'+0!$&;"
,ge,y,!#:$_(-*[./<[EMAIL PROTECTED],b-t,
.y...,$~=q~=?,;^_#+?{~,,$~=~
y.!-&*-/:[EMAIL PROTECTED] ().;s,;,
);,g,s,s,$~s,g,y,y,%,,g,eval
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]