From: Augustin Degomme Date: Tue, 17 Nov 2020 22:14:21 +0000 (+0100) Subject: attempt to avoid ugly sed in privatize-libs. May break. X-Git-Tag: v3.26~193 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/c8cd61907048eff98533558f3aa7393cb6cfd424 attempt to avoid ugly sed in privatize-libs. May break. --- diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 4528d48f88..9aed93b882 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -431,6 +431,8 @@ static void smpi_init_privatization_dlopen(const std::string& executable) for (auto const& libname : privatize_libs) { // load the library once to add it to the local libs, to get the absolute path void* libhandle = dlopen(libname.c_str(), RTLD_LAZY); + xbt_assert(libhandle != nullptr, + "Cannot dlopen %s - check your settings in smpi/privatize-libs", libname.c_str()); // get library name from path std::string fullpath = libname; #if not defined(__APPLE__) && not defined(__HAIKU__) @@ -479,10 +481,9 @@ static void smpi_init_privatization_dlopen(const std::string& executable) target_libs.push_back(target_lib); XBT_DEBUG("copy lib %s to %s, with size %lld", libpath.c_str(), target_lib.c_str(), (long long)fdin_size2); smpi_copy_file(libpath, target_lib, fdin_size2); - - std::string sedcommand = "sed -i -e 's/" + libname + "/" + target_lib + "/g' " + target_executable; - int status = system(sedcommand.c_str()); - xbt_assert(status == 0, "error while applying sed command %s \n", sedcommand.c_str()); + void* handle = dlopen(target_lib.c_str(), RTLD_LAZY | RTLD_LOCAL | WANT_RTLD_DEEPBIND); + xbt_assert(handle != nullptr, "dlopen of library %s failed: %s (errno: %d -- %s)", target_lib.c_str(), + dlerror(), errno, strerror(errno)); } }