LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1764|回复: 1

怎样从perl中调用c库里的函数

[复制链接]
发表于 2003-12-11 20:10:16 | 显示全部楼层 |阅读模式
假如你所用的库是mylib.a 头文件是mylib.h
假如mylib.h像以下内容:
       extern void hello();
hello()函数假如执行如下功能:
void hello()
{
     printf("Success call from perl to c libray!\n";
}


一、建立工作目录mytest,把mylib.a和mylib.h放到mytest中
二、在mytest的上层目录执行
          h2xs -O -n mytest ./mytest/mylib.h
三、进入mytest,修改mytest.xs,在文件末尾增加perl接口
  
void
hello()
        CODE:
         hello();
  
改变#include <./mytest/mylib.h>
为 #include "mylib.h"
一般情况下此行都需要修改。

四、修改Makefile.PL,其中#add begin和#add end中间的内容是新增加的。
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
    'NAME'      => 'mytest',
    'VERSION_FROM' => 'mytest.pm', # finds $VERSION
    'LIBS'      => [''],   # e.g., '-lm'
    'DEFINE'    => '',     # e.g., '-DHAVE_SOMETHING'
    'INC'       => '',     # e.g., '-I/usr/include/other'
    #add begin
    'MYEXTLIB'  => 'mylib.a',
    #add end
);
    #add begin
sub MY::postamble()
{
'
$(MYEXTLIB): .
';
#add end
}
   
五、执行perl Makefile.PL,让perl生成makefile
六、执行make
七、修改测试文件test.pl,修改完毕后改变为可执行
    #!/usr/bin/perl
    # Before `make install' is performed this script should be runnable with
    # `make test'. After `make install' it should work as `perl test.pl'

    ######################### We start with some black magic to print on failure.

    # Change 1..1 below to 1..last_test_to_print .
    # (It may become useful if the test is moved to ./t subdirectory.)

    use ExtUtils::testlib;
    BEGIN { $| = 1; print "1..1\n"; }
    END {print "not ok 1\n" unless $loaded;}
    use mytest;
    $loaded = 1;
    print "ok 1\n";

    ######################### End of black magic.

    # Insert your test code below (better if it prints "ok 13"
    # (correspondingly "not ok 13") depending on the success of chunk 13
    # of the test code):
    mytest::hello();
   
八、此时你应该能够看到
    Success call from perl to c libray!
发表于 2003-12-15 12:56:55 | 显示全部楼层
最好能举一个各种参数类型传递的例子,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表