2012-10-05 34 views
0

我想用Rmpi編寫一個程序,不幸的是,需要的符號是未定義的,並跟蹤它與otool和nm似乎只是導致我到libmpich.3.3.dylib。不幸的是符號MPI_Comm_dup,在這個動態庫中是未定義的。MPICH從macports丟失符號

但是,我不是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 

[email protected]:/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) 

[email protected]:/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) 

[email protected]:/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) 

[email protected]:/opt/local/lib$ nm -u libmpich.3.3.dylib | egrep dup 
_MPI_Comm_dup 
_MPL_trstrdup 
_dup2 
_strdup 

回答

2

你正在尋找(或至少,RMPI正在尋找)符號住在libpmpich.*.dylib。請注意該名稱中的p。爲什麼這個額外的圖書館存在的細節大多是歷史和無趣的,但它確實存在。它包含庫中幾乎所有的MPI_符號,而libmpich.*.dylib包含庫中的所有PMPI_符號以及MPI庫的所有實際實現代碼。

我從來沒有使用過Rmpi,但也許有一種方法可以將其配置爲在不同的庫中查找或將更多庫添加到搜索集中? IIRC中,Open MPI沒有將這兩個庫分開,這可能是Rmpi開發人員單個庫假設的來源。

+0

謝謝,我注意到你的openmpi評論,結果只是移動到openmpi和事情工作正常 –