Rmpi loads 2 versions of the same library
hi, 2014-03-14 4:16 GMT+09:00 Ross Boylan <ross at biostat.ucsf.edu>:
I also don't know why libmpi.so.0 is preferred to libmpi.so.1 in the explicit load above.
I also had the sense of incompatibility of this problem.
Did anyone try in other platforms?(exclude mac and linux)
The following corrections might be preferable for the time being.
--- Rmpi.orig/src/Rmpi.c 2013-03-27 02:21:49.000000000 +0900
+++ Rmpi/src/Rmpi.c 2014-03-14 11:36:43.000000000 +0900
@@ -18,6 +18,7 @@
#include "Rmpi.h"
#ifdef OPENMPI
+#define __USE_GNU
#include <dlfcn.h>
#endif
@@ -69,13 +70,19 @@
#ifndef MAC
#ifdef OPENMPI
- if (!dlopen("libmpi.so.0", RTLD_GLOBAL | RTLD_LAZY)
- && !dlopen("libmpi.so", RTLD_GLOBAL | RTLD_LAZY)){
- //&& !dlopen("libmpi.dylib", RTLD_GLOBAL | RTLD_LAZY)
- //&& !dlopen("libmpi.1.dylib", RTLD_GLOBAL | RTLD_LAZY)) {
- Rprintf("%s\n",dlerror());
- return AsInt(0);
- }
+ { /* ifndef from MAC to __linux__ ? if only problem on linux */
+ Dl_info info_MPI_Init;
+ int rc = dladdr((void *)MPI_Init, &info_MPI_Init);
+ if(rc){
+ if (!dlopen(info_MPI_Init.dli_fname, RTLD_GLOBAL | RTLD_LAZY)){
+ Rprintf("%s\n",dlerror());
+ return AsInt(0);
+ }
+ }else{
+ Rprintf("%s\n",dlerror());
+ return AsInt(0);
+ }
+ }
#endif
#endif
Using LD_DEBUG shows
24312: file=libmpi.so.1 [0]; needed by /home/ross/Rlib-3.0.1/Rmpi/libs/Rmpi.so [0]
24312: find library=libmpi.so.1 [0]; searching
24312: search path=/usr/lib64/R/lib:/home/ross/install/lib (LD_LIBRARY_PATH)
24312: trying file=/usr/lib64/R/lib/libmpi.so.1
24312: trying file=/home/ross/install/lib/libmpi.so.1
and, later,
24312: file=libmpi.so.0 [0]; needed by /home/ross/Rlib-3.0.1/Rmpi/libs/Rmpi.so [0]
24312: find library=libmpi.so.0 [0]; searching
24312: search path=/usr/lib64/R/lib:/home/ross/install/lib (LD_LIBRARY_PATH)
24312: trying file=/usr/lib64/R/lib/libmpi.so.0
24312: trying file=/home/ross/install/lib/libmpi.so.0
24312: search cache=/etc/ld.so.cache
24312: trying file=/usr/lib/libmpi.so.0
Does anyone know what's going on?
Ross Boylan
P.S. This might be relevant:
24300: calling init: /home/ross/Rlib-3.0.1/Rmpi/libs/Rmpi.so
24300:
24300: opening file=/home/ross/Rlib-3.0.1/Rmpi/libs/Rmpi.so [0]; direct_opencount=1
24300:
24300: /home/ross/Rlib-3.0.1/Rmpi/libs/Rmpi.so: error: symbol lookup error: undefined symbol: R_init_Rmpi (fatal)
24300: /home/ross/Rlib-3.0.1/Rmpi/libs/Rmpi.so: error: symbol lookup error: undefined symbol: R_init_Rmpi (fatal)
_______________________________________________ R-sig-hpc mailing list R-sig-hpc at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-hpc
Best Regards, -- EI-JI Nakama <nakama (a) ki.rim.or.jp> "\u4e2d\u9593\u6804\u6cbb" <nakama (a) ki.rim.or.jp>