我似乎无法在Cygwin 1.7.11中构建perl 5.6.2。
以下是我到目前为止所遵循的步骤。
从网站下载perl 5.6.2源代码并解压缩到某个文件夹“perl-5.6.2”
cd perl-5.6.2/bld
sh ../Configure -des -Dmksymlinks -Dprefix=/common/ndd/perl/5.6.2 -DDEBUGGING 2>&1
make 2>&1
make install 2>&1
以下是此日志:
make会创建“perl-5.6.2 / bld / perl.exe”,此文件每次都会生成一个中止信号。
这是在其上运行gdb的回溯。 (注意:我使用-DDEBUGGING配置,因此应启用所有gcc调试标志。)
(gdb) run
Starting program: /openlogic/build/work/perl-5.6.2/bld/perl.exe
[New Thread 3348.0xf54]
[New Thread 3348.0x48c]
Program received signal SIGABRT, Aborted.
0x00000000 in ?? ()
(gdb) backtrace
#0 0x00000000 in ?? ()
#1 0x7792f8b1 in ntdll!RtlUpdateClonedSRWLock ()
from /cygdrive/c/Windows/system32/ntdll.dll
#2 0x757f0a91 in WaitForSingleObjectEx ()
from /cygdrive/c/Windows/syswow64/KERNELBASE.dll
#3 0x000000a8 in ?? ()
#4 0x00000000 in ?? ()
(gdb) quit
此处标识在perl.exe上运行的ldd.exe命令
$ ldd /ndipiazza/build/work/perl-5.6.2/bld/perl.exe
ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77910000)
kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll (0x75cb0000)
KERNELBASE.dll => /cygdrive/c/Windows/syswow64/KERNELBASE.dll (0x757e0000)
libperl5_6_2.dll => /ndipiazza/build/work/perl-5.6.2/bld/libperl5_6_2.dll (0x66140000)
cygcrypt-0.dll => /usr/bin/cygcrypt-0.dll (0x67db0000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
??? => ??? (0x570000)
谁能明白为什么我会得到这个sigabrt?
编辑:这是Cygwin邮件列表中正在进行的讨论的链接:http://cygwin.com/ml/cygwin/2012-07/msg00368.html
答案 0 :(得分:5)
5.6已针对您的构建环境过时。 Maintenance patches存在。
我建议install perlbrew和patchperl:
$ perlbrew install-patchperl
将DTRT。
答案 1 :(得分:4)
这个问题高于我的工资等级,这是一个黑暗的镜头,但我记得的两件事毁掉了Cygwin上的perl5.6.2
$PATH
中的空格(例如/cygdrive/c/Program Files/BlahBlahBlah
)检查您的config.sh
脚本,看看它是否包含
sig_count='1'
sig_name='ZERO '
sig_name_init='"ZERO", 0'
sig_num='0 '
sig_num_init='0, 0'
你希望它说出类似
的内容sig_count='33'
sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH LOST USR1 USR2 RTMAX CLD POLL PWR RTMIN '
sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "URG", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "IO", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "LOST", "USR1", "USR2", "RTMAX", "CLD", "POLL", "PWR", "RTMIN", 0'
sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 20 23 29 32 '
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 20, 23, 29, 32, 0'
(我从构建版本中为config.sh
复制了这些值,以用于更新版本的Perl。您需要的值可能略有不同)
答案 2 :(得分:1)
我明白了。 Perl 5.6.2试图使用它自己的malloc。这与Cygwin的malloc不兼容。
我在Cygwin邮件列表上获得了一些帮助来解决这个问题:http://cygwin.com/ml/cygwin/2012-07/msg00380.html
底线,将-Dusemymalloc=n
添加到sh ./Configure参数。
然后它有效。