作者LiloHuang (相见不如怀念)
看板Perl
标题[心得] 从Perl中撰写C语言
时间Fri Feb 8 17:18:00 2008
LiloHuang 於 2008 春
1. 前言
稍微熟悉 Perl 的人都了解,Perl 本身有许多的模组都是使用C语言或者C++撰写的。
如果今天想要提昇部份程式代码的速度,或者因为部份代码不想被人看到进而保护,你
就可以选择使用 perlxs 的方式来进行撰写的动作。
自行撰写 perlxs 非常简单,只要你具备 C语言或者C++的基础即可简单上手,但对於
新手而言,困难的是开发环境的建置,在此小弟做个简单的介绍,分享一些经验给大家。
2. 开发环境
a. Microsoft Visual C++ 编译环境
使用 VC++ 6.0 版本,由於微软後期的 VC++ 非常邪恶,使用了.manifest档案
来控制执行 dll 时要载入的 C++ RunTime Library。因此我们如果想纯粹使用
VC++ 来编译的,那就只能透过 VC++ 6.0 才能正常编译。
当然,还是有办法可以让 VC++ 7.1、8.0,甚至最新的 VS 2008 的9.0 运作,
不过方式非常繁杂,小弟认为还是别搞了吧,有兴趣在询问这个部份怎样处理。
b. MinGW + ExtUtils::FakeConfig 编译环境
安装适合的 gcc 或 g++ 开发环境,如果你偏好使用 Dev C++ 当然也可以,
记得安装後把编译器下的 bin 目录加到作业系统的 PATH 环境变数中方便编译,
当然 Windows SDK 不能少,要不然会不能编译。
3. 模组撰写
在这边我们选择 b 方案 (你得先装好 ExtUtils::FakeConfig 模组 与 nmake)
并且使用 h2xs 做一个非常简单的范例,就来写一个简单的求最大值动作,
步骤如下:
a. 首先透过 cmd.exe,找一个空白资料夹,输入 h2xs -A -n TestMAX
b. 此时会产生一个资料夹为 TestMAX,进入里面有一堆档案是我们刚刚产生的
c. 透过任何一个编辑器打开 TestMAX.xs 这个档案,这边开始我们尝试撰写
一个简单的求最大值程式,将以下的程式码加到 TestMAX.xs 的尾巴:
int MAX(int a, int b)
CODE:
RETVAL = (a > b) ? a : b;
OUTPUT:
RETVAL
d. 输入 perl -MConfig_m Makefile.PL 来产生 Makefile
e. 使用 nmake 进行编译
nmake test 进行测试
nmake install 进行安装
f. 撰写一个简单的 Perl程式:
use TestMAX;
print TestMAX::MAX(100, 20);
g. 此时输出应该为 100,因为他是一个比较大的值
4. 注意事项
a. 安装 nmake 时可以 google 找一下 nmake15.exe,放置到 system32 下面,并且
更改名称为 nmake.exe
b. 缺少 Windows SDK 的请上微软网站抓取。
c. 记得 PATH 要指定,否则无法直接使用 gcc 与 g++ 等指令。
d. 更多细节请查阅 perldoc 有关 perlxstut、perlxs、xsubpp、perlguts 等资讯。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.169.157.34
※ 编辑: LiloHuang 来自: 218.169.157.34 (02/08 17:21)
1F:推 clkao:使用strawberry perl的话 在win32就直接tool chain都有罗 02/08 17:52
2F:→ LiloHuang:我提供的方式是给 Active Perl 用的 XD 02/08 18:34
3F:→ LiloHuang:有兴趣的板友也可以试试 clkao 大的那个直译器版本 02/08 18:35
5F:→ LiloHuang:另外..若使用Perl5.61以上版本请修改Makefile中的 02/08 23:22
6F:→ LiloHuang:将 PERL_ARCHIVE 修改为 $(PERL_INC)\perl58.lib 02/08 23:22