Perl ActiveState-如何在Windows x64上将整型变量设置为32位宽度?

Perl ActiveState-如何在Windows x64上将整型变量设置为32位宽度?,perl,Perl,$perl-V| grep use64bit use64bitint=define,use64bitall=undef,uselongdouble=undef 我已经在Windows上安装了ActiveState 5.20 for Perl 64。整数变量在内存中分配为64位。是否可以切换到32位整数 我试着用谷歌搜索,结果是: Windows makefiles中添加了一个新的makefile选项USE_64_BIT_INT。如果希望32位perl使用64位整数,请将此设置为在构建32位per

$perl-V| grep use64bit use64bitint=define,use64bitall=undef,uselongdouble=undef

我已经在Windows上安装了ActiveState 5.20 for Perl 64。整数变量在内存中分配为64位。是否可以切换到32位整数

我试着用谷歌搜索,结果是:

Windows makefiles中添加了一个新的makefile选项USE_64_BIT_INT。如果希望32位perl使用64位整数,请将此设置为在构建32位perl时定义


问题是我是通过*.msi安装的,因此它没有提示启用/禁用此选项。

如果需要32位整数,请安装32位ActivePerl。更好的方法是安装32位的草莓Perl

USE_64_BIT_INT选项用于在32位Perl上启用64位整数,这不是您想要的


如果您通过将Perl安装限制为使用32位整数来解释您试图解决的问题,那么我相信我们将能够提供更好的帮助。Perl保证整数值足够大,可以容纳指针。因此,32位perl整数的大小至少为32位,64位perl整数的大小至少为64位

默认情况下,32位perl将使用32位整数,但可以传递flag-duse64bit进行配置,使构建过程构建一个使用64位整数的32位perl。在Windows build上不使用Configure,但通过在makefile中编辑USE_64_BIT_INT的值可以获得相同的行为

您选择从ActiveState下载预构建的perl,而不是构建自己的perl。ActiveState现在在构建其32位perl时使用等效的-Duse64bitint


如果您想要一个使用32位整数的Perl构建,您需要构建自己的或者让其他人为您构建一个。草莓Perl的32位Perl可能使用32位整数。

我根据您的评论写下这个答案,您使用的是PerlApp,最后需要一个较小的.exe

PerlApp不编译传统意义上的perl脚本。它将一个perl.dll与您的脚本源、任何已使用/包含模块的源、任何XS模块的.dll文件和提取器存根打包在一个自解压/执行的Zip存档中

因此,内存中变量的大小与脚本中该变量的文本名称的大小几乎没有关系(当该变量封装在.exe中时)

可能影响结果.exe大小的可能操作:

告诉PerlApp使用Windows目标而不是Windows 64目标,这样可以相对较小地节省包含32位而不是64位.dll的开销。 使用-dependent或-trim选项构建.exe,以完全从存档中删除一些较大的文件。这些文件必须单独在系统上可用 现在需要注意的是:这些选项要求在目标机器上安装ActivePerl和/或模块。如果您的.exe是唯一一个正在使用的,那么最终您将以增加维护开销为代价一无所获。如果计算机上有多个PerlApp生成的.exe文件,则不在每个文件中包含perl.dll可以节省大量空间


最后一句话:我发现PerlApp是在一个独立的文件中交付Perl程序的一种有用方法。任何一个像样的安装向导都可以做到这一点。PerlApp打包过程的开销通常不是减少所需磁盘空间、内存使用甚至启动时间的好方法。即使经常用于此目的,它对反向工程的保护也非常差。

只有在您构建的问题与主题不匹配时,才能设置此选项。如果您想强制使用32位数学,可能有助于解释原因,因为可能有一种方法可以将结果强制转换为32位数字。安装32位ActivePerl不是最简单的方法吗?您的问题没有任何不兼容的更改。您引用的文本来自特定于平台的Notes/Win32,它在32位构建的Perl上提供了64位整数,而不是相反around@ChuongVo我不确定我是否理解你的要求。在任何情况下,你都需要这样做。编辑win32\Makefile以禁用64位整数。另外,从32位构建环境运行构建。ActivePerl分发他们分发的内容。如果您需要其他内容,则需要构建自己的。32位ActivePerl使用64位intsI不确定我是否可以使用-dependent或-trim选项构建我的.exe文件,因为此exe文件将在可能与我的计算机没有相同模块的目标机上运行。我正试图通过在win32/Makefile中进行一些修改来重新编译Perl,我预计PerlApp将在非活动状态的Perl构建中惨遭失败。如果没有ActivePerl构建,使用PAR::Packer和一个草莓Perl构建可能会更好 不使用64位整数的ds。查看2015年4月23日起的第三个方框
>perl -v | find "This is"
This is perl 5, version 20, subversion 2 (v5.20.2) built for MSWin32-x86-multi-thread-64int

>perl -V:archname
archname='MSWin32-x86-multi-thread-64int';   # x86 = 32-bit binary
                                             # x64 = 64-bit binary
>perl -V:use64bitint
use64bitint='define';                        # -Duse64bitint or makefile equiv was used

>perl -V:ivsize                              # Size of integer values
ivsize='8';                                  # 8 bytes = 64 bits