怎样从perl中调用c库里的函数
假如你所用的库是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!
呵呵,搞定!