用perl xs封装C语言的库时遇到的有关问题,求高手解答
用perl xs封装C语言的库时遇到的问题,求高手解答啊
我在学习perl xs封装C语言库的东西!可是我按照perldoc上的例子去联系的时候总是报错,我看的文档地址是: perldoc.perl.org/perlxstut.html#EXAMPLE-4
EXAMPLE4的这个例子!
我先创建一个Mytest2文件夹,然后再在MyTest2下面创建一个mylib文件夹,在该文件夹下面创建三个文件:mylib.h,mylib.c Makefile.pl,代码分别是:
mylib.h
mylib.c
Makefile.PL
然后我按照文档的说明,在终端里面进入到Mytest2的上一层文件夹,输入命令
总是报错,说:
Can't find -0.h in . /usr/include /usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include /usr/include Mytest
高手们,这是怎么回事啊?错误在哪儿啊?是不是文档有点儿问题啊?
------解决方案--------------------
文档里说Make sure you use a tab and not spaces on the lines beginning with "$(AR)" and "$(RANLIB)".
我知道 **** 是会转换的,那你原来的代码呢,是 tab 吗?你用的是什么 IDE?IDE 会转换吗?
我在学习perl xs封装C语言库的东西!可是我按照perldoc上的例子去联系的时候总是报错,我看的文档地址是: perldoc.perl.org/perlxstut.html#EXAMPLE-4
EXAMPLE4的这个例子!
我先创建一个Mytest2文件夹,然后再在MyTest2下面创建一个mylib文件夹,在该文件夹下面创建三个文件:mylib.h,mylib.c Makefile.pl,代码分别是:
mylib.h
#define TESTVAL 4
extern double foo(int, long, const char*);
mylib.c
#include <stdlib.h>
#include "./mylib.h"
double
foo(int a, long b, const char *c)
{
return (a + b + atof(c) + TESTVAL);
}
Makefile.PL
use ExtUtils::MakeMaker;
$Verbose = 1;
WriteMakefile(
NAME => 'Mytest2::mylib',
SKIP => [qw(all static static_lib dynamic dynamic_lib)],
clean => {'FILES' => 'libmylib$(LIB_EXT)'},
);
sub MY::top_targets {
'
all :: static
pure_all :: static
static :: libmylib$(LIB_EXT)
libmylib$(LIB_EXT): $(O_FILES)
$(AR) cr libmylib$(LIB_EXT) $(O_FILES)
$(RANLIB) libmylib$(LIB_EXT)
';
}
然后我按照文档的说明,在终端里面进入到Mytest2的上一层文件夹,输入命令
h2xs -O -n Mytest2 ./Mytest2/mylib/mylib.h
总是报错,说:
Can't find -0.h in . /usr/include /usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include /usr/include Mytest
Can't find -0.h in . /usr/include /usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include /usr/include Mytest
高手们,这是怎么回事啊?错误在哪儿啊?是不是文档有点儿问题啊?
perl
xs
------解决方案--------------------
文档里说Make sure you use a tab and not spaces on the lines beginning with "$(AR)" and "$(RANLIB)".
我知道 **** 是会转换的,那你原来的代码呢,是 tab 吗?你用的是什么 IDE?IDE 会转换吗?