[R-sig-hpc] Rmpi loads 2 versions of the same library

Ei-ji Nakama nakama at ki.rim.or.jp
Fri Mar 14 03:51:46 CET 2014


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>



More information about the R-sig-hpc mailing list