4

問題は解決しました!

  1. ここに投稿されたドンの指示に従ってください
  2. 環境変数を開きます([マイコンピューター]-> [プロパティ](コンテキストメニュー内)-> [詳細])
  3. C_INCLUDE_PATHMPIのインクルードディレクトリを指すように、新しい環境変数を追加または作成します。私の場合、/c/program files/mpich2/include
  4. LIBRARY_PATHMPIのlibディレクトリを指すように、新しい環境変数を追加または作成します。私の場合、/c/program files/mpich2/lib
  5. どういうわけかlibmpi.aを非表示にします。必要に応じて、後で修正できます。これはハックですが、ldが失敗するため、これを行わずにhaskell-mpiをビルドすることはできません。名前を_libmpi.aに変更しました

これで、haskell-mpiはWindows上に構築されるはずです。今後さらにトラブルが発生することを予想していましたが、それが構築され、私の問題は解決しました。


大学のラボの1つにあるラボマシンでhaskell-mpiを使用して、並列コンピューティングクラスの最終プロジェクトを実行したいのですが、haskell-mpiをMPICH2に対してビルドしようとすると問題が発生します。

haskell-mpiはほとんど完全に文書化されておらず、gitリポジトリを掘り下げることで、いくつかのサンプルプログラムをプログラムすることができましたが、Windowsでのセットアップには何の役にも立ちませんでした。私の個人的なLinuxシステムでは、MPICH2に対してhaskell-mpiをセットアップして実行するのに問題はありませんでした。

問題はおそらく、カバールの1つ、MPICH2のインストール方法、またはhaskell-mpiのカバール構成にあるため、タグの選択にあります。

トラブルシューティングのためにここで実験し、必要に応じて情報を追加することもできますが、最終的にはこれらのマシンにアクセスできなくなります。

これを実行するラボで管理者権限を持っているので、MPICH2のインストール自体に問題がある場合は、実際に再インストールできます。

haskell-mpiをインストールしようとすると、cabalは次のように失敗します。

Resolving dependencies...
Configuring haskell-mpi-1.0.0...
cabal: Missing dependency on a foreign library:
* Missing C library: mpi
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
cabal: Error: some packages failed to install:
haskell-mpi-1.0.0 failed during the configure step. The exception was:
ExitFailure 1

--extra-lib-dirsと--extra-include-dirsに与えてみたものは次のとおりです。

--extra-lib-dirs="C:\Program Files\MPICH2\lib" 
--extra-include-dirs="C:\Program Files\MPICH2\include"

私は、これらのフラグを配置する場所を並べ替えて、バックラッシュを回避し、短いパスPROGRA~1とこれらのさまざまな順列を使用してみました。ですから、これが役に立たないと思います。依存関係が実際に何を意味するのかを知りmpi、このライブラリを実際に構築できるように、依存関係をどのように満たすかを理解する必要があります。現時点で前述の2つのフォルダにあるものは次のとおりです。

Libs:

 Volume in drive C has no label.
 Volume Serial Number is 5406-5C5C

 Directory of C:\Program Files\MPICH2\lib

04/22/2011  01:20 PM    <DIR>          .
04/22/2011  01:20 PM    <DIR>          ..
01/31/2011  03:59 PM           515,704 cxx.lib
01/31/2011  04:23 PM           137,434 fmpich2.lib
01/31/2011  04:25 PM           410,982 fmpich2g.lib
01/31/2011  04:29 PM           162,690 fmpich2s.lib
01/31/2011  04:53 PM                 0 libfmpich2g.a
01/31/2011  04:53 PM                 0 libmpi.a
01/31/2011  04:53 PM           215,528 libmpicxx.a
01/31/2011  04:16 PM            10,618 mpe.lib
01/31/2011  04:46 PM           135,434 mpi.lib
               9 File(s)      1,588,390 bytes
               2 Dir(s)  221,505,835,008 bytes free

含む:

 Volume in drive C has no label.
 Volume Serial Number is 5406-5C5C

 Directory of C:\Program Files\MPICH2\include

02/01/2011  05:38 PM    <DIR>          .
02/01/2011  05:38 PM    <DIR>          ..
11/17/2009  09:46 PM             4,857 clog_commset.h
11/02/2007  05:50 PM               696 clog_const.h
01/31/2011  03:50 PM               731 clog_inttypes.h
11/17/2009  09:46 PM             1,353 clog_uuid.h
10/21/2010  01:20 PM               355 mpe.h
11/17/2009  09:46 PM            11,102 mpe_log.h
11/02/2007  05:50 PM             1,833 mpe_logf.h
11/17/2009  09:46 PM             1,322 mpe_misc.h
01/31/2011  03:50 PM            57,128 mpi.h
01/31/2011  04:23 PM             3,251 mpi.mod
01/31/2011  03:50 PM            97,267 mpicxx.h
01/31/2011  03:51 PM            19,051 mpif.h
01/31/2011  03:50 PM            16,765 mpio.h
01/31/2011  04:23 PM            13,668 mpi_base.mod
01/31/2011  04:23 PM            30,866 mpi_constants.mod
01/31/2011  04:23 PM             7,802 mpi_sizeofs.mod
              16 File(s)        268,047 bytes
               2 Dir(s)  221,505,830,912 bytes free

認識できるほど欠落している可能性のあるものがここにありますか?

私はこの時点でかなり困惑しています。ほぼすべての提案が役立ちます。

よろしくお願いいたします。

PS:これはおそらく「haskell-mpi」のタグが付けられているはずですが、新しいタグを作成することは許可されていません。まだ誰も実際に使っていないようです。

編集:ドンの提案に従って、

MingGWとMSYSをインストールしました。mingw-get updateを実行した後、mingw32-getを使用してlibtools、mingw32-utils、およびmingw32-binutilsを取得しました。Windows構成GUIを使用して、システム全体に対して次の環境変数を設定しました。

LIBRARY_PATH="C:\Program Files\MPICH2\lib"
C_INCLUDE_PATH="C:\Program Files\MPICH2\include"

echo $LIBRARY_PATHそしてecho %LIBRARY_PATH%今、両方とも期待どおりに機能しますが、驚くことはありません。環境変数が設定されます。進歩して。

cabal install haskell-mpiそれでも以前と同じ出力を生成します。

ldで長い間遊んだ、巨大な赤いニシン...

libmpi.aをldから非表示にして機能させる必要がありましたが、haskell-mpiがビルドされるようになりました。

ステップバイステップの詳細を一番上に置きます。

4

1 に答える 1

3

mpiの依存関係が実際に何を意味するのかを知る必要があります

この行extra-libraries: mpiは、Cabalが-lmpildリンカーオプションに追加することを意味します。さらに、ヘッダーを処理するツールは、インクルードパスを検索します。

では、GHCとbinutilsがそのライブラリを見つけるのをどのように支援するのでしょうか?

ウィキによると、 mingwまたはmsysがあると仮定すると、

Cソフトウェアにリンクする必要がある場合は、ヘッダーファイルを見つけることができるディレクトリを一覧表示する環境変数C_INCLUDE_PATHを定義します。ライブラリをリンクするには、環境変数LIBRARY_PATHも定義する必要があります。これにより、.aファイルと.libファイルが存在するディレクトリが一覧表示されます。

したがって、ヘッダーとライブラリへのパスが含まれるようにパスを設定してみてください。

于 2011-04-22T20:48:50.960 に答える