开发者

Error: Cannot parse function definition from ' hello()' in Mytest.xs, line 9

开发者 https://www.devze.com 2022-12-25 22:24 出处:网络
I am trying to use perl XS in RHEL 5. but simple programm is giving error.I followed same code as in Example 1 in perldoc perlxstut

I am trying to use perl XS in RHEL 5. but simple programm is giving error.I followed same code as in Example 1 in perldoc perlxstut

Can anyone help me in correcting the following error?

[root@localhost Mytest]# 
[root@localhost Mytest]# pwd
/home/nikole/perlcode/Mytest
[root@localhost Mytest]# ls
blib     lib          MANIFEST  Mytest.xs   pm_to_blib  README
Changes  Makefile.PL  Mytest.c  Mytest.xsc  ppport.h    t
[root@localhost Mytest]# perl Makefile.PL 
Checking if your kit is complete...
Looks good
Writing Makefile for Mytest
[root@localhost Mytest]# 
[root@localhost Mytest]# 
[root@localhost Mytest]# make
/usr/bin/perl /usr/lib/perl5/5.8.8/ExtUtils/xsubpp  -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap  Mytest.xs > Mytest.xsc && mv Mytest.xsc Mytest.c
Error: Cannot parse function definition from '    hello()' in Mytest.xs, line 9
Please specify prototyping behavior for Mytest.xs (see perlxs manual)
make: *** [Mytest.c] Error 1
[root@localhost Mytest]# 

Thanks Ryan. I removed white spaces between void and hello, and it solved the problem. After editing, my Mytest.xs looks like

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

MODULE = Mytest         PACKAGE = Mytest

void
hello()
CODE:
    printf("Hello, world!\n");

Update

Hi Ryan & cjm, I resolved error in doing make as above but my perl programm is giving error now " use: command not found"

Any ideas?

[root@localhost Mytest]# 
[root@localhost Mytest]# 
[root@localhost Mytest]# perl Makefile.PL 
Checking if your kit is complete...
Looks good
Writing Makefile for Mytest
[root@localhost Mytest]# 
[root@localhost Mytest]# 
[root@localhost Mytest]# make
gcc -c  -I. -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables   -DVERSION=\"0.01\" -DXS_VERSION=\"0.01\" -fPIC "-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE"   Mytest.c
Running Mkbootstrap for Mytest ()

chmod 644 Mytest.bs

rm -f blib/arch/auto/Mytest/Mytest.so

gcc  -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -L/usr/local/lib Mytest.o  -o blib/arch/auto/Mytest/Mytest.so    \
 开发者_StackOverflow中文版               \

chmod 755 blib/arch/auto/Mytest/Mytest.so
cp Mytest.bs blib/arch/auto/Mytest/Mytest.bs
chmod 644 blib/arch/auto/Mytest/Mytest.bs
Manifying blib/man3/Mytest.3pm
[root@localhost Mytest]# 


[root@localhost Mytest]# 
[root@localhost Mytest]# 
[root@localhost Mytest]# cat hello

   #! /usr/bin/perl -w
    use ExtUtils::testlib;
    use Mytest;
    Mytest::hello();


[root@localhost Mytest]# 
[root@localhost Mytest]# cat hello

   #! /usr/bin/perl -w
    use ExtUtils::testlib;
    use Mytest;
    Mytest::hello();


[root@localhost Mytest]# 
[root@localhost Mytest]# ls -l hello 

-rwxrwxrwx 1 root root 87 Apr  8 04:01 hello

[root@localhost Mytest]# 


[root@localhost Mytest]# 
[root@localhost Mytest]# ./hello 

./hello: line 2: use: command not found
./hello: line 3: use: command not found
./hello: line 4: syntax error near unexpected token `;'
./hello: line 4: `    Mytest::hello();'
[root@localhost Mytest]#

Update

thanks Ryan, removed white spaces between void and hello it solved problem After editing , my Mytest.xs looks like

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

MODULE = Mytest         PACKAGE = Mytest

void

hello()

        CODE:
            printf("Hello, world!\n");


In your Mytest.xs remove the whitespace in front of hello();

Update: Your new problem, "command not found..." doesn't sound like Perl is running your program. I think it may be from whitespace before "#!/usr/bin/perl" in hello.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号