Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

C++: Virtuelle Funktionen von Objekten aus shared libraries [solved]

Diskussion: C++: Virtuelle Funktionen von Objekten aus shared libraries [solved] im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Edit: Ich hasse mich selber Für alle die ähnliche Probleme haben: 1. Es schadet nicht zu überprüfen, ob die ...

Antwort
Alt 02.11.11, 14:57   #1 (permalink)
 
Benutzerbild von benediktibk
 
Registriert seit: 03.05.07
benediktibk Leistung: 8086benediktibk Leistung: 8086
Likes: 50
erledigt C++: Virtuelle Funktionen von Objekten aus shared libraries [solved]

Anzeige

Edit: Ich hasse mich selber
Für alle die ähnliche Probleme haben:
1. Es schadet nicht zu überprüfen, ob die Libraries tatsächlich geladen wurden (beim Beispiel weiter unten müsste es "./library.so" heißen anstelle von "library.so")
2. Man sollte die Library erst dann wieder entladen, wenn die Objekte nicht mehr verwendet werden.


Ich möchte gerne ein Objekt, welches virtuelle Funktionen enthält, innerhalb einer dynamisch nachgeladenen Library erstellen:

Code:
int main(int argc, char **argv)
{
	void *libHandle = dlopen("library.so", RTLD_NOW);
	Class* (*createFunction)() = (Class* (*)())dlsym(libHandle, "createFunction");
	Class *a = createFunction();

	a->virtFunc();

	delete a;
	dlclose(libHandle);
}
Die dazugehörige Klasse sieht so aus:
Code:
class Class
{
	public:
		virtual void virtFunc();
};

void Class::virtFunc()
{
	printf("I was called\n");
}
Und noch bei der Library dabei ist folgender Quellcode:
Code:
extern "C" Class* createFunction()
{
	return new Class();
}
(die includes habe ich mir alle gespart, siehe Anhang)

Das Zeug crasht aber aus Prinzip immer beim Aufruf der virtuellen Funktion:
Code:
(gdb) break main
Breakpoint 1 at 0x80485cd: file main.cpp, line 7.
(gdb) run
Starting program: /home/benediktibk/Desktop/blub/a.out 

Breakpoint 1, main (argc=1, argv=0xbffff434) at main.cpp:7
7		void *libHandle = dlopen("library.so", RTLD_NOW);
(gdb) n
8		Class* (*createFunction)() = (Class* (*)())dlsym(libHandle, "createFunction");
(gdb) n
9		Class *a = createFunction();
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb)
Meine Frage: Warum? Ist da die vtable irgendwie im Anus Afrikanus, muss man das Zeug speziell linken oder was zur Hölle ist da los?!

Ich entschuldige mich hiermit für meinen kleinen Anfall, aber das ist nun mal sehr ärgerlich.

Vielen Dank fürs Durchlesen (und hoffentlich auch helfen),
benediktibk
Angehängte Dateien
Dateityp: zip blub.zip (12,1 KB, 0x aufgerufen)

Geändert von benediktibk (02.11.11 um 15:41 Uhr)
benediktibk ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » C++: Virtuelle Funktionen von Objekten aus shared libraries [solved]
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
perl threads::shared - diverse Probleme mit "shared" variablen keksinat0r Code Kitchen 4 22.02.09 18:43
threads::shared | threads->object() arbeitet nicht mit "shared" arrays keksinat0r Code Kitchen 0 23.08.08 14:11
mit Java und Array mit Objekten odigo Code Kitchen 5 25.08.07 01:28
shared memory CPU8080 Windows 3 23.05.06 19:10
fehlende libraries? Stromer Code Kitchen 10 09.09.04 18:31


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61