extern "C" void _gfortran_set_args(int, char **);
#endif
+#ifndef RTLD_DEEPBIND
+/* RTLD_DEEPBIND is a bad idea of GNU ld that obviously does not exist on other platforms
+ * See https://www.akkadia.org/drepper/dsohowto.pdf
+ * and https://lists.freebsd.org/pipermail/freebsd-current/2016-March/060284.html
+*/
+#define RTLD_DEEPBIND 0
+#endif
+
#if HAVE_PAPI
#include "papi.h"
std::string papi_default_config_name = "default";
rank++;
// Load the copy and resolve the entry point:
- void* handle = dlopen(target_executable.c_str(), RTLD_LAZY | RTLD_LOCAL);
+ void* handle = dlopen(target_executable.c_str(), RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
int saved_errno = errno;
if (simgrid::config::get_value<bool>("smpi/keep-temps") == false) {
unlink(target_executable.c_str());