4

Cygwin1.7.11でperl5.6.2をビルドできないようです。

これが私がこれまでにそれを行うために行っているステップです。

ウェブサイトからperl5.6.2ソースをダウンロードし、いくつかのフォルダ「perl-5.6.2」にuntarします。

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

これからのログは次のとおりです。

http://pastebin.com/pqLg4S7z

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

ここで、ldd.exeコマンドがperl.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

4

3 に答える 3

5

5.6はビルド環境にとって時代遅れです。メンテナンスパッチが存在します。

perlbrewとpatchperlをインストールすることをお勧めします:

$ perlbrew install-patchperl

これはDTRTになります。

于 2012-06-22T15:39:52.307 に答える
4

この質問は私の給与水準を上回っており、これは暗闇の中でのショットですが、Cygwinで構築されたperl5.6.2を台無しにすることを覚えている2つのことは

  1. $PATH(eg /cygdrive/c/Program Files/BlahBlahBlah)のスペース
  2. シグナル名を判別できないconfigureスクリプト

スクリプトをチェックして、次の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'

(これらの値は、新しいバージョンのPerlのビルドからコピーしconfig.shました。必要な値は若干異なる場合があります)

于 2012-06-22T15:44:07.033 に答える
1

私はそれを考え出した。Perl 5.6.2は、独自のmallocを使用しようとします。これはCygwinのmallocと互換性がありません。

これを修正するために、Cygwinメーリングリストでいくつかのヘルプが提供されました:http://cygwin.com/ml/cygwin/2012-07/msg00380.html

-Dusemymalloc=n結論として、sh./Configure引数に追加します。

その後、それは動作します。

于 2012-07-19T16:59:56.287 に答える