2

Windows用のシンプルなOpenMPIアプリケーションを構築しようとしています。OpenMPI-v1.6.2(64ビット)用のバイナリをインストールしました。VisualStudio2010もインストールしました。マシンはWindows7x64です。

MPI :: Send()を使用する単純なプログラムをコンパイルしようとすると、MPI :: Datatype :: Free()を解決できないというリンカーエラーが発生します。

最小限の例を次に示します。

#include <mpi.h>
#include <iostream>

int main( int argc, char** argv ) {
    MPI::Init(argc,argv);

    // Meant to run with 2 processes.
    if (MPI::COMM_WORLD.Get_rank() == 0) {
        int data;
        MPI::COMM_WORLD.Recv(&data,1,MPI_INT,1,0);
        std::cout << "received " << data << std::endl;
    } else {
        int data = 0xdead;
        std::cout << "sending " << data << std::endl;
        MPI::COMM_WORLD.Send(&data,1,MPI_INT,0,0);
    }

    MPI::Finalize();
}

私がそれをコンパイルするとき:

mpic++ send_compile.cpp -o send_compile.exe -DOMPI_IMPORTS -DOPAL_IMPORTS -DORTE_IMPORTS 


Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : Command line warning D9035 : option 'o' has been deprecated and will be removed in a future release
send_compile.cpp
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:send_compile.exe 
/out:send_compile.exe 
"/LIBPATH:C:\Program Files (x86)\OpenMPI_v1.6.2-x64/lib" 
libmpi_cxx.lib 
libmpi.lib 
libopen-pal.lib 
libopen-rte.lib 
advapi32.lib 
Ws2_32.lib 
shlwapi.lib 
send_compile.obj 
send_compile.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl MPI::Datatype::Free(void)" (?Free@Datatype@MPI@@UEAAXXZ)
send_compile.exe : fatal error LNK1120: 1 unresolved externals

このプログラムは、このあたりのUbuntuマシンで問題なくコンパイルおよび実行されます。何が問題なのかわかりません。Open MPIのドキュメントには、CPP定義(OMPI_IMPORTS、OPAL_IMPORTS、ORTE_IMPORTS)の追加については何も記載されていませんでしたが、CPP定義がないと、これと同様の他のリンカーエラーが発生していました。ただし、この特定の問題に関する情報は見つかりません。

dumpbinを使用して、MPIによってインストールされた.libファイルにあるシンボルを取得しようとしましたが、その関数名への参照が見つかりませんでした。MPIヘッダーを調べても答えは見つかりませんでした。

このWindowsマシンで正常にコンパイルおよび実行されるCの同様のプログラムがあります。C++で何が間違っているのかわかりません。誰かが私を正しい方向に向けることができますか?

4

0 に答える 0