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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top