0

Rmpi を使用してプログラムを作成しようとしていますが、残念ながら必要なシンボルが定義されておらず、otool と nm で追跡するとlibmpich.3.3.dylib. 残念ながら、シンボルMPI_Comm_dup, はこの動的ライブラリでは定義されていません。

ただし、私は OSX 動的ライブラリの専門家ではなく、私のアプローチと結論が正しいかどうか疑問に思っています。さらに、この問題を解決するための提案をお待ちしています。

ありがとう、

Error : .onLoad failed in loadNamespace() for 'Rmpi', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/home/jonathan.lisic/R/x86_64-apple-darwin12.2.0-library/2.15/Rmpi/libs/x86_64/Rmpi.so':
  dlopen(/home/jonathan.lisic/R/x86_64-apple-darwin12.2.0-library/2.15/Rmpi/libs/x86_64/Rmpi.so, 6): Symbol not found: _MPI_Comm_dup
  Referenced from: /opt/local/lib/libmpich.3.3.dylib
  Expected in: flat namespace
 in /opt/local/lib/libmpich.3.3.dylib
Error: package/namespace load failed for Rmpi

jonathan.lisic@server:/opt/local$ otool -L /home/jonathan.lisic/R/x86_64-apple-darwin12.2.0-library/2.15/Rmpi/libs/x86_64/Rmpi.so
/home/jonathan.lisic/R/x86_64-apple-darwin12.2.0-library/2.15/Rmpi/libs/x86_64/Rmpi.so:
        Rmpi.so (compatibility version 0.0.0, current version 0.0.0)
        /opt/local/lib/libmpich.3.3.dylib (compatibility version 0.0.0, current version 3.0.0)
        /opt/local/lib/libmpl.1.dylib (compatibility version 3.0.0, current version 3.0.0)
        /opt/local/lib/libopa.1.dylib (compatibility version 2.0.0, current version 2.0.0)
        /opt/local/lib/R/lib/x86_64/libR.dylib (compatibility version 2.15.0, current version 2.15.1)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1669.0.0)
        /opt/local/lib/gcc45/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

jonathan.lisic@server:/opt/local/lib$ otool -L libmpich.dylib
libmpich.dylib:
        /opt/local/lib/libmpich.3.3.dylib (compatibility version 0.0.0, current version 3.0.0)
        /opt/local/lib/gcc43/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

jonathan.lisic@server:/opt/local/lib$ otool -L libmpich.3.3.dylib
libmpich.3.3.dylib:
        /opt/local/lib/libmpich.3.3.dylib (compatibility version 0.0.0, current version 3.0.0)
        /opt/local/lib/gcc43/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

jonathan.lisic@server:/opt/local/lib$ nm  -u libmpich.3.3.dylib | egrep dup
_MPI_Comm_dup
_MPL_trstrdup
_dup2
_strdup
4

1 に答える 1

2

あなたが探しているシンボル (または少なくとも Rmpi​​ が探しているシンボル) はlibpmpich.*.dylib. その名前の に注意してくださいp。この余分なライブラリが存在する理由の詳細は、ほとんどが歴史的で面白くありませんが、存在します。これには、ライブラリ内のほぼすべてのMPI_シンボルが含まれていますが、ライブラリ内のlibmpich.*.dylibすべてのPMPI_シンボルと、MPI ライブラリの実際の実装コードがすべて含まれています。

私は Rmpi​​ を自分で使用したことはありませんが、別のライブラリを検索するように構成する方法や、検索されたセットにライブラリを追加する方法はあるでしょうか? IIRC、Open MPI はこれら 2 つのライブラリを分離していません。これは、Rmpi 開発者による単一ライブラリの想定の原因となる可能性があります。

于 2012-10-05T20:43:08.730 に答える