MPICH2はC:\ Program Files\MPICH2にインストールされます。(対象の)2つのサブディレクトリがあり、\include
.hファイルと\lib
.libファイルが含まれています。
MPICH2に付属のreadmeには、次の手順があります。
- makefileを作成する
- 追加
–I...mpich2\include
- 追加
–L...mpich2\lib
- 追加
–lmpi
- ソースファイルのルールを追加します
- コンパイル
私のプロジェクトには他のルールがないので、makefileを作成しません。コマンドラインに移動して、次のようにコンパイルしてみます。
g++ -I"C:\Program Files\MPICH2\include" main.cpp -L"C:\Program Files\MPICH2\lib" -lmpi
これによりundefined reference
、コード内のすべてのMPIシンボルで一握りのエラーが発生します。私はそれを修正しようとして何時間も費やし、ジャグリングし-I
、切り替え、パラメーターの順序をシャッフルし、すべての.libファイルをソースと同じディレクトリにコピーしましたが、何も機能しないようです。-L
-l
これをリンクさせるには、どのようなブードゥーが必要ですか?
編集:私は問題を見つけたと思います:これは冗長モードでのリンカーの出力の抜粋です(-Wl,--verbose
コンパイルコマンドに追加):
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.lib failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib\libmingwex.a failed
どうやら、リンカは私が提供するディレクトリ名に/
代わりにを追加します\
(何らかの理由でフォーマットを探す場合を除くlib___.a
)。これは明らかに有効なパスではありません。スラッシュの代わりにバックスラッシュを使用するようにリンカーに指示する方法はありますか?
これも私の目に留まりました:
attempt to open /mingw/lib/libmingwex.a succeeded
だから私はこのようにコンパイルしてみました:
g++ -I"/Program Files/MPICH2/include" -L"/Program Files/MPICH2/lib" objManager.cpp ongom.cpp io.cpp main.cpp -lmpi -lcxx
しかし、それでも同じundefined reference
エラーが発生します。