怎样从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' => '','-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! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |