perl 最新源码 windows下编译

本文介绍了如何在Windows环境下使用SDK和DDK编译Perl源码,以确保依赖msvcrt.dll运行库。同时提到了VS2010编译选项以及使用GCC(如Strawberry Perl)的替代方案。编译过程涉及修改win32.c、makefile以及解决函数缺失问题,例如创建自定义的msvcrtex.lib来包含msvcrt.dll中未包含的函数。
摘要由CSDN通过智能技术生成

源码目录:

解压,\win32目录,
nmake
nmake test
nmake install

1. 使用SDK的头文件,DDK中的cl、link等工具,好处,保证运行库是msvcrt.dll

2. 当然也可以用vs2010不加修改的完成编译,可是用的是MSVCR100。

如果使用gcc编译,可以直接用strawberry即可,遗憾的是activeperl最新三方提供的也是gcc编译,与strawberry基本无异。

==================================================

下面使用方式一进行编译:

比如源码:

http://www.cpan.org/src/5.0/perl-5.18.2.tar.gz

使用方式一的修改点:

(op.c 、toke.c和pad.c有宽字符,用txt另存为ansi编码即可)

win32.c

注释掉:
1.

//~ #if _MSC_VER >= 1400 && defined(_WRITE_ABORT_MSG)
//~ #  define SET_INVALID_PARAMETER_HANDLER
//~ #endif

2.

//~ #if !defined __MINGW32__      /* compiler intolerance */
    //~ extern int sys_nerr;
//~ #endif

makefile修改

1. setargv 使用一致的宏

$(GLOBEXE) : perlglob$(o)
	$(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
	    perlglob$(o) setargv$(o)

改成:

$(GLOBEXE) : perlglob$(o)
	$(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
	    perlglob$(o) $(SETARGV_OBJ)

2. 运行库的扩展支持

LIBC	= msvcrt.lib

增量一些自定义扩展的

LIBC	= msvcrt.lib msvcrtex.lib commonCRT.lib

3. /GS 去掉

!IF "$(WIN64)" == "define" && "$(CCTYPE)" == "SDK2003SP1"
LIBBASEFILES    = $(LIBBASEFILES) bufferoverflowU.lib
!ENDIF

替换为:

LIBBASEFILES    = $(LIBBASEFILES) bufferoverflow.lib


4.

EXTRACFLAGS	= -nologo -GF -W3 -GS-


比如标准msvcrt.dll中没有localtime_s函数,可以写一个commonCRT.lib包含这个函数即可,如下:

#include <stdio.h>

errno_t localtime_s(struct tm* _tm,const time_t *time )
{
    _tm=(struct tm *)localtime(time);
    return 0;
}


由于ddk中提供的msvcrt.lib不完全包含msvcrt.dll中导出的函数,我们可以自已做一个msvcrtex.lib包含这个函数(使用dumpbin lib工具)。

C:\Users\G-Spider>perl -V
Summary of my perl5 (revision 5 version 18 subversion 2) configuration:

  Platform:
    osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread
    uname=''
    config_args='undef'
    hint=recommended, useposi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值