smi*_*ith 8 perl perl-module perl-xs
我正在用Perl构建一个XS扩展.我有两个文件:
.h).c)目前我所做的是将所有C文件代码Model=放在XS文件之前并在之后包装我想要的函数Model=.
compliation没有问题,我可以从perl调用特定的函数.
但我想将.xs文件与C文件分开.
我希望.xs文件只包含wrap函数,这些函数将调用.c文件上的函数,但是当我这样做并运行dmake命令时,我得到错误代码129未定义引用'parse.c'文件.
我尝试使用C和OBJECT属性包含.c文件用于WriteMakerFile并仍然得到一个错误,任何想法如何将xs文件拆分为2个一个c文件和其他包含c函数的xs,它们是.c文件的一部分使用ExtUtils :: MakeMaker.
例子将不胜感激.
Sin*_*nür 10
这实际上相当简单:
#ifndef H_HELLO
const char *hello(void);
#define H_HELLO
#endif
Run Code Online (Sandbox Code Playgroud)
const char *
hello(void) {
return "Hello";
}
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)
use strict;
use warnings;
use Test::More;
BEGIN { use_ok('My::Example') };
is(My::Example::hello(), 'Hello', 'hello returns "Hello"');
done_testing;
Run Code Online (Sandbox Code Playgroud)
[~/tmp/My-Example]$ prove -vb t/My-Example.t t/My-Example.t .. ok 1 - use My::Example; ok 2 - hello returns "Hello" 1..2 ok All tests successful. Files=1, Tests=2, 0 wallclock secs ( 0.04 usr 0.01 sys + 0.03 cusr 0.00 csys = 0.08 CPU) Result: PASS
由... Makefile.PL生成h2xs.我唯一改变的是取消注释以下行:
# Un-comment this if you add C files to link with later: OBJECT => '$(O_FILES)', # link all the C files too
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |