2009-07-29 12 views
0

Ich habe einige C++ - Code, den ich zum Testen verwenden, in denen die erste Zeile ist ein Aufruf von dlopen in einem Versuch, mein freigegebenes Objekt zu laden. Beim Schlagen diese Zeile ich die folgende Fehlermeldung erhalten:Fehler auf dlopen: St9bad_alloc

Terminate called after throwing an instance of std::bad_alloc: 
    what() : St9bad_alloc 

ich den Speicher upped haben (jetzt kostenlos -m berichtet, dass ich ~ 120 MB frei, wenn meine exe in GDB geladen) und ich bekomme immer noch die gleichen Botschaft.

Wer irgendwelche Ideen zu was sonst könnte dies verursachen & was kann ich tun, um es zu lösen?

Antwort

0

Es ist wahrscheinlich, weil es nicht alle Abhängigkeiten finden kann.

Ändern Sie das Verzeichnis in das Verzeichnis, in dem Ihre Anwendung lebt.
Dann verwenden Sie nm auf die gemeinsame lib, die Sie versuchen zu laden (der gleiche Pfad wie Sie im Code verwendet).
Dies zeigt fehlende Abhängigkeiten an.

2

Meine Vermutung ist, dass dlopen nichts damit zu tun hat. dlopen() ist eine C-Sprachenfunktion und kann keine Ausnahme auslösen. Was sie tatsächlich auslösen kann, sind Initialisierungsfunktionen in Ihren gemeinsamen Objekten, zum Beispiel die Ausdrücke, die Sie Ihren statischen Objekten zuweisen. Zum Beispiel, wenn Sie dies im gemeinsamen Objekt schreiben Sie Laden, es mit bad_alloc abstürzen:

// dso.cpp start 
#include <dso.h> 

Object* instance = new Object(); 

// the rest of the file 

Aber dlopen Zeug ist völlig irrelevant, nehme ich an.

Verwandte Themen