Erreur sur dlopen: St9bad_alloc
-
05-07-2019 - |
Question
J'ai un code c ++ que j'utilise pour tester dans lequel la première ligne est un appel à dlopen pour tenter de charger mon objet partagé. En frappant cette ligne, j'obtiens l'erreur suivante:
Terminate called after throwing an instance of std::bad_alloc:
what() : St9bad_alloc
J'ai augmenté la mémoire (-m indique maintenant que j'ai environ 120 Mo d'espace disque disponible lorsque mon fichier exe est chargé dans gdb) et que le même message s'affiche toujours.
Quelqu'un a-t-il une idée de ce qui pourrait en être la cause? qu'est-ce que je peux faire pour le résoudre?
La solution
Consultez le C ++ dlopen mini HOWTO , j'espère que cela vous aidera.
Autres conseils
Je pense que dlopen n’a rien à voir avec cela. dlopen () est une fonction du langage C et ne peut pas lever d’exception. Les fonctions d’initialisation de vos objets partagés, telles que les expressions que vous affectez à vos objets statiques, peuvent en être gâchées. Par exemple, si vous écrivez ceci dans l'objet partagé que vous chargez, il risque de planter avec bad_alloc:
// dso.cpp start
#include <dso.h>
Object* instance = new Object();
// the rest of the file
Mais les choses dlopen n’ont aucune importance, je suppose.
C’est probablement parce qu’il ne trouve pas toutes ses dépendances.
Modifiez le répertoire dans le répertoire où réside votre application.
Ensuite, utilisez nm sur la bibliothèque partagée que vous essayez de charger (même chemin que vous avez utilisé dans le code).
Cela montrera toutes les dépendances manquantes.