IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

ActivePerl(5.10.0 Build 1002)でcpanを本気で使いたかった

      2014/05/13

基本的には「Perlメモ/モジュールのインストール(CPAN) - Walrus, Digit.」にある情報に従っていきます。 現時点で変わっている部分を中心に補足します。 しかし、結果的に挫折しましたので、試行錯誤の記録になっています。 個人的にはモジュールを自分の環境に合わせて変更することで落ち着きました。

ActivePerlがインストールされた状態からスタートします。 ActivePerl配布場所からダウンロードできます。 名前などを入れる場所がありますが、全てオプションなので、入力しなくてもダウンロードできます。 「tarとgzip」 [Perlメモ/モジュールのインストール(CPAN) - Walrus, Digit.] は問題ないでしょう。 「texinst756.zip」 [Index of /pub/text/TeX/ptex-win32/current] あるいは、その最新版を手に入れます。 続いて「makeとCコンパイラ」 [Perlメモ/モジュールのインストール(CPAN) - Walrus, Digit.] です。 「Visual C++」 [Visual Studio 2008 Express Editions] をインストールします。 (最小限でインストールしても概ねOKのようですが、msvcr90.dllが見つからないエラーの関係でオプションをつけて改めてインストールしたため検証は出来ていません(詳細は後述)。) ここまできたらcpanをセッティングします。 最近のActivePerlでは、binフォルダにcpan.batがあるので、コマンドプロンプトでbinフォルダ(デフォルトなら"C:\Perl\bin")に移動して「cpan」とタイプすれば起動できます。 (pathが通っていれば「ファイル名を指定して実行...」(ショートカット:windowsボタン+R)から「cpan」とかも可能。) コマンドプロンプトですが、プログラムメニューから「Visual Studio 2008 コマンド プロンプト」を使うとpathの設定が少ないのでよいと思います。 (スタート→すべてのプログラム→Visual C++ 9.0 Express Edition→Visual Studio Tools→Visual Studio 2008 コマンド プロンプト) 起動すると、以下のような画面になると思います。

私はActivePerlのインストール先を「D:\usr」に変更していますので、そちらに移動し、cpanを起動します。

(ブログを書く前にセッティングをしているので多少の違いはあるでしょうが、あまり細かい部分は気にしないでいきましょう。) cpanの初期設定は、cpanが起動した状態から「o conf init」と入力します。

「Use of uninitialized value」というエラーが出ることがあります(ここでは出ています)が、一応は無害なのでここでは無視します。 最後の質問は「できるだけ自動的に設定しますか?」と訊かれています。 [yes]は、省略してEnterを押したときに「yes」と入力されたことにする、という程度の意味です。 ここでは、ひとまず、プログラムに任せて設定してもらいます。

「urllist」以外は設定されているはずです。 ついでなので「urllist」も設定しておきましょう。 設定するときは「o conf init urllist」です。

Asia→Japan→すべて(「1-9」など)としておき、それ以外の質問にはデフォルトで問題ないでしょう。 仕上げに、変更したurllistを保存するためにコミットしておきます。

cpanはこれで設定完了です。 多くはこの状態でインストールが可能でしょう。 しかし、実行時に「msvcr90.dllが見つからない」というエラーが出る場合があります。 当初は「Visual C++」をインストールする際に、最小限(オプションを全てはずして)でインストールしましたが、このエラーが出たため、改めてオプションを全てチェックして再インストールしました(結果的に「Microsoft Silverlight runtime」はインストールに失敗)が、それでもエラーは出たままでした。 念のため「vcredist_x86.exe」 [ダウンロードの詳細 : Visual C++ 2008 再頒布可能パッケージ (x86)] をダウンロードしてインストールしてみましたが、解決しませんでした。 その後、msvcr90.dllと同じフォルダにあるファイルをすべてpathの通ったところにおいて実行してみましたが、今度はランタイムエラー(R6034エラー)になってしまいました。 いろいろ調べたところ、原因が「ExtUtils::MakeMaker」にあるのではないかという記述を見つけました。

ExtUtils::MakeMaker モジュールが Windows 版 ActivePerl 向けに生成する Makefile は、Windows XP (および Windows Server 2003) + Visual C++ 2003/2005 の環境 (いや、実際、VC++ 2003 では試したことないので知らんのですが、システム DLL に Manifest の概念が導入されたのがどうやらこいつかららしいので、多分間違いないかと) で nmake → nmake install しても、use する際に R6034 エラーが発生してモジュールのロードに失敗してしまうという問題があります。

1年以上前の記事なので、不思議に思いながらソースを見てみました。 結果からすると原因はおそらく「$Config{ccversion}」です。 「perl -V」でperlがどのようにコンパイルされたのか等の細かい情報が出てきますが、ActivePerl(5.10.0 Build 1002)は、この「ccversion」が「12」なのです。 おそらくこの数字が使われているのでしょう。 manifestの概念が導入されたccversionは14以降らしく、ExtUtils::MM_Win32のソースコードにもその記述がありました。 本来であれば、perl本体に使用したCコンパイラを使う、という想定でしょうから、ソースコードとしてもおかしくは無いと思います。 現在の環境のccやccversionを設定する処理をどこかにいれておけばいいのでしょうかね?

ExtUtils::MakeMakerは、最新版(ExtUtils::MM_Win32が
1.15のやつ)を入れれば、パッチを当てなくても大丈夫でした。

[Windowsのフリーウェア、フリーソフトを紹介 - KOCのブログ | Windowsで、CPANからモジュールを入れる方法(補足)]

気になったので1.15のソースも見てみましたが、処理の仕方は同じでした。 とりあえず、自分の環境だけなら問題ないので、バージョン判定の部分を削除して使うことにしました。

何か良い方法を思いついたら書くことにします。

respo

respo link

ZenBackWidget

 - 情報技術について