0

Win32::Daemonを自分でビルドしようとしています。私が CPAN を使用しない理由は、Perl モジュールの動作をより深く掘り下げたいからです。最後に、これが機能することを確認することで、別の問題の解決策を見つけたいと思っています (ここでは重要ではありません)。

モジュールをビルドするための 3 つのオプションが表示されます: cygwin、mingw、microsoft コンパイラ (cl)

MinGW では、サポートされていないことが報告されます (Makefile.PL の場合は単純です)。MinGW に一致するようにチェックを変更すると、より多くのエラーに展開されますtchar.h。それを持っている)。

しかし、とにかく私の本当の目標は、MSコンパイラでビルドすることです.

だから今ここに私の実行からの私のnmake出力がありますname /f Makefile

NMAKE : fatal error U1073: "C:/Program" could not be created.
Stop.

エラーメッセージをドイツ語から大雑把に翻訳しましたが、ステートメントは簡単です。ここに表示されるのは、パスの問題 (おそらくスペース) のようです。スラッシュにも気付きます。はスクリプトMakefileによって作成されましたMakefile.PL(私は Active Perl v5.12.1 を使用しています):

use strict;
use warnings;

use Config qw(%Config);
use ExtUtils::MakeMaker;

unless ($^O eq "MSWin32" || $^O eq "cygwin") {
    die "OS unsupported\n";
}

require Win32;

my %param = (
    NAME          => 'Win32::Daemon',
    VERSION_FROM  => 'Daemon.pm',
    DEFINE        => '-DPERL_NO_GET_CONTEXT',
    OBJECT        => 'CCallbackList$(OBJ_EXT) CCallbackTimer$(OBJ_EXT) Constant$(OBJ_EXT) CWinStation$(OBJ_EXT) Daemon$(OBJ_EXT) ServiceThread$(OBJ_EXT)',
    XS            => { 'Daemon.xs' => 'Daemon.cpp' },
);
$param{INC} .= ' -EHsc' if $Config{'cc'} =~ /^cl/i;
$param{NO_META} = 1 if eval "$ExtUtils::MakeMaker::VERSION" >= 6.10_03;
WriteMakefile(%param);

sub MY::xs_c {
    '
.xs.cpp:
    $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs >xstmp.c && $(MV) xstmp.c $*.cpp
';
}

私は MakeMaker についてあまり知りませんが、私が修正できるものは何も見当たりませんMakefile。引用など、いくつか試しましたが、何も役に立ちませんでした。

問題は、私は Windows でビルドするときにこのような問題に慣れていますが、通常、これは Unix 用に作成されたツールに関するものです。これは明示的にWindowsのみであるため、そのまま使用できると思います。だから私は何か間違ったことをしていると思います。

解決策を見つける場所について何か助けはありますか? 前もって感謝します。

編集/追加: Active Perl 5.16.x を搭載した別の Win7 マシンでこれを試したところ、魅力的に機能しました。このマシンからの別の出力と、実行中に失敗した現在の出力を調べたところperl Makefile.PL、次の出力が表示されました。

... Detected uninstalled Perl.  Trying to continue.
Unable to find a perl 5 (by these names: C:\Program Files\Perl64\bin\perl.exe perl.exe perl5.exe perl5.12.1.exe miniperl.exe, in these dirs: . [...] C:\Program Files\Perl64\site\bin C:\Program Files\Perl64\bin [...])
Have \progra~1\perl64\lib
Want \temp\perl---please-run-the-install-script---\lib
Writing Makefile for Win32::Daemon

出力を切り捨てました。誰か説明してください: perl Makefile.PLorを実行できるperl -vのに、Perl が置かれている正確なディレクトリに Perl が見つからないのはなぜですか? 再インストールしましたがダメでした…

4

1 に答える 1

1

さて、何時間もの検索の末、ようやくこれを解決したようです。問題は複数の問題の中にあります。

「アンインストールされたperl」の最初のコマンドは意味がありませんが、perl Makefile.PL PERL_SRC="C\:Program Files\Perl64". 警告:これはコマンド シェルでは機能しませんpowershellでした。パスを正しく処理しないため、 を使用する必要がありました。これを少し調整する必要があるかもしれません。:最終的に、インストーラー(会社のソフトウェア配布)によって提供されたものではなく、元のActive Perlをインストールすることで修正しました

次に、perl が見つからない問題について説明します。これは、パス内のスペースの問題です。スペースなしでシンボリックリンクを作成することで、これを(一見)修正しました。perl Makefile.PLエラーは発生しませんが、 nmake -f "Makefile"失敗しました。したがって、実際の解決策は次のとおりです。perl パスにスペースを入れないでください。これは最悪で、率直に言って、2012 年にはこれはもう問題にはならないはずですが、どうぞ。

皆様のご尽力に感謝いたします。これは難しい問題でした。

于 2012-07-05T13:09:00.763 に答える