+ // set argv[0] to executable_path
+ xbt_free((*args4argv)[0]);
+ (*args4argv)[0] = xbt_strdup(executable_path.c_str());
+
+#if !SMPI_IFORT
+ // take a copy of args4argv to keep reference of the allocated strings
+ const std::vector<char*> args2str(*args4argv);
+#endif
+ int argc = args4argv->size();
+ args4argv->push_back(nullptr);
+ char** argv = args4argv->data();
+
+ simgrid::smpi::ActorExt::init();
+#if SMPI_IFORT
+ for_rtl_init_ (&argc, argv);
+#elif SMPI_FLANG
+ __io_set_argc(argc);
+ __io_set_argv(argv);
+#elif SMPI_GFORTRAN
+ _gfortran_set_args(argc, argv);
+#endif
+ int res = entry_point(argc, argv);
+
+#if SMPI_IFORT
+ for_rtl_finish_ ();
+#else
+ for (char* s : args2str)
+ xbt_free(s);
+ delete args4argv;
+#endif