perl C/C++ 扩展(二)

第二讲
perl 加载c/c++的库

先通过h2xs 创建一个新的工程

h2xs -A -n two_test

进入目录

cd two_test

创建一个mylib文件夹,存放静态库

mkdir mylib

c程序头文件chen.h

#include<stdio.h>
void chen(char *);

c程序代码chen.c

#include "chen.h"
void chen(char * name){
printf("input string is : %s\n", name);
}

编译静态库

gcc -c chen.c
ar -r libchen.a chen.o

将libchen.a静态库与chen.h头文件拷贝到two_test/mylib

cp libchen.a two_test/mylib/
cp chen.h two_test/mylib

修改perl 生成makefile 的脚本Makefile.PL

use 5.014002;
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
NAME => ‘two_test‘,
VERSION_FROM => ‘lib/two_test.pm‘, # finds $VERSION
PREREQ_PM => {}, # e.g., Module::Name => 1.1

($] >= 5.005 ? ## Add these new keywords supported since 5.005
(ABSTRACT_FROM => ‘lib/two_test.pm‘, # retrieve abstract from module
AUTHOR => ‘root <[email protected]>‘) : ()),
LIBS => [‘‘], # e.g., ‘-lm‘
DEFINE => ‘‘, # e.g., ‘-DHAVE_SOMETHING‘
INC => ‘-I.‘, # e.g., ‘-I. -I/usr/include/other‘
# Un-comment this if you add C files to link with later:
# OBJECT => ‘$(O_FILES)‘, # link all the C files too
MYEXTLIB => ‘mylib/libchen.a‘
);

MYEXTLIB => ‘mylib/libchen.a‘ 是新增的命令,作用是在生成perl 扩展包时包含libchen.a的库

修改two_test.xs 文件

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"
#include "mylib/chen.h"

MODULE = two_test PACKAGE = two_test

void
chen(name)
char * name

红色部分为增加代码

编译并安装,安装需要root 权限

perl Makefile.PL
make
make install

编写一个测试程序two_test.pl, 测试扩展

#!/usr/bin/perl
use two_test;
$one = "sfjak";
&two_test::chen($one);

执行程序

perl two_test.pl

输出:
input string is : sfjak

成功调用扩展

参考文章:
一个简单例子
http://www.chinaunix.net/old_jh/25/951221.html
IBM介绍如何使用c扩展perl
http://www.ibm.com/developerworks/cn/aix/library/0908_tangming_perltoc/
介绍如何使用C++扩展perl

perl C/C++ 扩展(二),布布扣,bubuko.com

时间: 2024-10-22 22:30:30

perl C/C++ 扩展(二)的相关文章

perl C/C++ 扩展(四)

在前面三篇博客中,我们了解到如何使用c/c++ 扩展自己的perl 库,但是博主在学习过程中,对动态库或静态库的加载不是十分了解,后来自己又细挖一下.后来就有了这篇博文,再后来,没有再后来了,囧!! 我们先来看看 perl c/c++ 扩展(二)中的 Makefile.PL WriteMakefile( NAME => 'two_test', VERSION_FROM => 'lib/two_test.pm', # finds $VERSION PREREQ_PM => {}, # e.

perl C/C++ 扩展(五)

perl 的C++扩展,返回值为自定义类型. 在 perl C/C++扩展(三) 中,我已经介绍了,如何让perl 认识 c++的类,但是前面的介绍中,包括我参考的博客http://chunyemen.org/archives/493,都提到,返回值必须是基础类型.对于开发者而言,如果返回值只能是基础类型,那么对于扩展的开发热情就大大降低了.楼主排除万难,终于在<高级perl编程(第二版)>.((美)simon cozens)一书的第十八章与第二十章中得到些许启发. 下面我来介绍一下玩法. 首

perl C/C++ 扩展(一)

通过h2xs 中间件,我们可以快速的使用c或则C++ 库来实现perl 扩展功能 第一讲:跑通hello world 程序******************************我们使用命令:h2xs -A -n test它会帮助你建立一个test的文件夹,里面已经初始化部分文件了 进入test目录 cd test 打开文件test.xs vi test.xs 原文件内容为: #include "EXTERN.h" #include "perl.h" #incl

perl C/C++ 扩展(三)

第三讲扩展库使用c++实现,在调用函数后,返回对象变量,perl 能正确使用所有对象成员 使用h2xs 命令生成初始文件 h2xs -A -n three_test 登录目录 cd three_test c++ 头文件 #ifndef INCLUDED_DUCK_H #define INCLUDED_DUCK_H 1 #include <string> using std::string; class Duck { public: Duck(char*); char* getName(); v

Perl学习笔记(二)--标量数据

一.  数字 Perl内部并不存在整数值-程序中用到的整型常量会被转换成等效的浮点数值 浮点数直接量 小数点与前置的正负号都是可选的,数字后面也可以加上用"e"表示的10的次方标识符(即指数表示法).例如: 1.25 7.25e45(7.25乘以10的45次方) -12e-24(负12乘以10的-24次方) -1.2E-23(另一种表示法:字母E也可以是大写的) 2. 整数直接量 0 -40 92283377112222  #可以表示为922_833771_12222,看起来更清楚 二

perl自学笔记整理二

开篇:如果说perl世界里,标量指的是单数的话,那么复数指的就是列表和数组. 列表指的是标量的有序集合:数组则指的是存储列表的变量:无论列表还是数组都可以包含无数多个元素. 一)访问数组中的元素 1) 访问数组中的元素 例如:[[email protected] fuxi]# cat a1.pl #!/usr/bin/perl#a1$fred[0] = "yabba";        #将值yabba赋值给数组$fred的第零个元素$fred[0] ;$fred[1] = "

Perl的骆驼精神(二)

在Perl中可以自己创建子程序(Subroutine): 关键字sub,子程序名以及用花括号封闭起来的代码块. sub  marine { ... } 子程序名与标量的命名空间是不同的两个部分. 子程序的返回值:最后一次运算的表达式即是默认的返回值.也可以用return来显式的返回,这样之后的语句不会执行. 在标量上下文返回的会是标量,在列表上下文返回的也是列表. 子程序中的参数:子程序内部可以使用@_,$_[1],$_[2],,,这样的变量来表示.@_变量是子程序私有变量,递归调用时,不会出错

易扩展二次开发的web快速开发平台

我们先来看看web快速开发平台的发展 从编程之初,便免不了和方法,类,接口之类的东西打交道.久而久之,自然会对此进行总结,由此而产生了开发平台.而今中国的程序员之中,有很大一部分都是编一些企业MIS.政府MIS之类的程序.其主要工作就是对数据进行一下增删改查的操作,对MIS系统做一些基础的管理而已.随着互联网的流行,自然又要求以互联网为基础,把这些都网络化,以实现网络资源共享,而不是传统的单机模式.诸如用友.金蝶等都有自己的开发构件库,还有SAP的ABAP开发平台等等.但是ABAP开发平台太复杂

ES6学习笔记二:各种扩展

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7242967.html 一:字符串扩展 二:正则的扩展 三:Number的扩展 四:函数扩展 五:数组扩展 六:对象扩展