From c8cd61907048eff98533558f3aa7393cb6cfd424 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Tue, 17 Nov 2020 23:14:21 +0100 Subject: [PATCH] attempt to avoid ugly sed in privatize-libs. May break. --- src/smpi/internals/smpi_global.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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)); } } -- 2.20.1