我正在用Perl构建XS扩展。我有两个文件:
.h
).c
)[目前,我要做的是将所有C文件代码放在XS文件上的Model=
之前,并将我想要的功能包装在Model=
之后。
该编译没有问题,我可以从perl调用特定的函数。
但是我想将.xs
文件与C文件分开。
我希望.xs
文件仅包含包装函数,并且这些函数将调用.c
文件上的函数,但是当我这样做并运行dmake
命令时,我得到了错误代码129未定义的引用'parse.c'文件。
[我尝试使用WriteMakerFile的C和OBJECT属性包含.c文件,并且仍然不清楚如何将xs文件拆分为2个,一个c文件,另一个包装c函数的其他xs,这是一个错误。 c文件,使用ExtUtils::MakeMaker。
示例将不胜感激。
hello.h
#ifndef H_HELLO
const char *hello(void);
#define H_HELLO
#endif
hello.c
const char *
hello(void) {
return "Hello";
}
Example.xs
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include "hello.h"
MODULE = My::Example PACKAGE = My::Example PREFIX = MY_
PROTOTYPES: DISABLE
const char *
MY_hello()
CODE:
RETVAL = hello();
OUTPUT:
RETVAL
t / My-Example.t
use strict;
use warnings;
use Test::More;
BEGIN { use_ok('My::Example') };
is(My::Example::hello(), 'Hello', 'hello returns "Hello"');
done_testing;
[~~ tmp / My-Example] $证明-vb t / My-Example.tt / My-Example.t ..好的1-使用My :: Example;ok 2-hello返回“ Hello”1..2好所有测试均成功。文件= 1,测试= 2,0壁钟秒(0.04 usr 0.01 sys + 0.03 cusr 0.00 csys = 0.08 CPU)结果:PASS
Makefile.PL
由h2xs
生成。我唯一更改的是取消注释以下行:#如果要添加C文件以便以后与之链接,请取消注释:OBJECT =>'$(O_FILES)',#也链接了所有C文件