Shared Library aus mehreren Klassen
-
Kann man mehrere Header + Sourcefiles zusammen in eine .so packen?
Ich habe 3 Klassen die stark voneinander abhängen. Diese möchte ich irgendwie in eine Shared Library packen. In einem Programm soll von eigentlich nur eine Klasse benutzt werden, die anderen beiden werden intern genutzt, so dass ich am liebsten nur eine library einbinden würde.
Da ich bisher noch gar keine Erfahrung mitr sowas habe, würde ich mich über ein paar Tipps freuen.
-
Tip: konkrete Fragen stellen hilft konkrete Antworten zu bekommen.
-
1. In eine .so gehören weder Header noch Sourcedateien, sondern fertiger Objektcode
2. Klar, da kannst du so viel rein packen wie du lustig bist und du kannst ausgewählte Teile bei Bedarf benutzen. Ich sehe überhaupt gar nicht, wo du da irgendwelche Probleme haben könntest. Siehe auch hustbaers Beitrag. Was willst du überhaupt wissen?
-
Ich versuche mich besser auszudrücken:
Ich habe die Klassen
// C.h #include "A.h" #include "B.h" class C { A irgendwas1; B irgendwas2; SchöneMethoden(); }// C.h class A { tolle Sachen; }...
und zu jeder Klasse jeweils Header und Sourcefile, wie angedeutet.
Nun hätte ich gerne eine Library, mit der ich die Klasse C benutzen kann ohne die Sourcefiles von A und B zur Stelle zu haben.
Im Projekt möchte ich aber nur eine libC.so einbinden müssen, da A und B nur intern von C benutzt werden.Ich hoffe das war nicht zu wirr

-
Und? Ich kapiere immer noch nicht, wo du da überhaupt ein Problem hast. Den Sourcecode brauchst du nach dem compilieren für überhaupt nichts. Pack einfach den Objektcode von A, B und C in eine Bibliothek und nenn sie libC.
-
Entweder du lieferst die Header-Files A.h und B.h mit aus. Dann kannst du A und B höchstens in einen Detail-Namespace stecken.
Oder du änderst C, so dass statt einer Instanz von A/B nur ein Zeiger auf A/B gespeichert wird. Dann reicht eine "forward declaration", und du musst A.h und B.h nicht mit ausliefern:
class A; class B; class C { public: // ... private: A* m_myA; B* m_myB; };