Я пытаюсь использовать Perl XS в RHEL 5.
но простая программа дает ошибку. Я следовал тому же коду, что и в Пример 1 в perldoc perlxstut
Может кто-нибудь помочь мне исправить следующую ошибку?
[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]#
Спасибо, Райан. Я удалил пробелы между void
и hello
, и это решило проблему. После редактирования мой Mytest.xs
выглядит как
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
MODULE = Mytest PACKAGE = Mytest
void
hello()
CODE:
printf("Hello, world!\n");
Обновление
Привет Райан & cjm,
Я исправил ошибку, выполнив команду make, как указано выше, но моя программа на Perl теперь выдает ошибку
«use: команда не найдена»
Есть идеи?
[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 \
\
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
спасибо, Райан,
убраны пробелы между пустотой и приветом
это решило проблему
После редактирования мой Mytest.xs выглядит как
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
MODULE = Mytest PACKAGE = Mytest
void
hello()
CODE:
printf("Hello, world!\n");