2012-10-05 5 views
0

Rmpi로 프로그램을 작성하려고하는데 불행히도 필요한 기호가 정의되지 않았으며 otool 및 nm을 사용하여 추적하면 libmpich.3.3.dylib으로 이어집니다. 불행히도 심볼 MPI_Comm_dup은이 동적 라이브러리에서 정의되지 않습니다.MPICH from macports missing symbols

그러나 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로 옮겨 가면서 정상적으로 작동했습니다. –