Hi,
ich versuche mich gerade in der Library-Erstellung, was mit C anscheinend kein Problem ist. Allerdings habe ich grosse Probleme, in C++ auf Klassen zuzugreifen, die in den .so-Dateien implementiert sind. Quasi geht es überhaupt nicht (:.
Ich denke, es fehlt einfach eine Vorwärtsdeklaration ... aber ich kann ja nicht die Prototypen der Klasse einbauen. Nehmen wir mal meine folgende (Meister-) Klasse:
Code:
#include <iostream>
class meineKlasse {
public:
meineKlasse();
~meineKlasse();
void printHello();
};
Die die folgende Implementation besitzt:
Code:
#include "meineklasse.h"
meineKlasse::meineKlasse() {
}
meineKlasse::~meineKlasse() {
}
void meineKlasse::printHello() {
printf("Hello World");
}
Alles soweit recht einfach und plain. Mit folgenden Befehlen kompiliere ich die zu einer Shared Library:
c++ -fPIC -c meineklasse.cpp
c++ -shared -Wl,-soname,libmeineklasse.so.0 -o libmeineklasse.so.0.0 meineklasse.o-lc
Das funktioniert auch ganz ohne Fehlermeldung.
Wenn ich jetzt aber damit in meiner main.cpp arbeiten möchte:
Code:
class meineKlasse;
int main() {
meineKlasse mk;
return 0;
}
und das so kompiliere:
c++ main.cpp -lmeineklasse
kommt der folgende Fehler:
main.cpp: In function `int main()':
main.cpp:5: error: aggregate `meineKlasse mk' has incomplete type and cannot be
defined
Die Shared Lib liegt unter /usr/local/lib und ldconfig habe ich danach auch ausgeführt, ohne das er meckerte.
Vllt. weiss hier noch jemand, was falsch laufen könnte (ist bestimmt nur eine Kleinigkeit) ... im Internet finde ich nur, wie ich C-Shared-Libs unter C++ nutze ...
Vielen Dank,
Morfio ...
Lesezeichen