Fragen zu Dynamischen Bibliotheken



  • 1: Was ist das beste tutorial für C++?
    2: Geht das auch ohne extern "C" { } ?
    3: Kann mir jemand ein einfaches beispiel mit vielen kommentaren beispiel geben ? (siehe unten)

    Mehr info, was ich erreichen will:
    Ich habe ca 5 "Module" (eine klasse, die andere klassen("Engines) verwaltet). Alle verwanteten klassen (Engines) in einem Module stammen von einer basis-klasse ab, definiert im entsprechenden Modul (diese dient als interface - polymorphysimus). Die Module sind dynamische bibliotheken die auch erst geladen werden. Diese laden dann die Engines, die sie verwalten. Das programm selbst beinhaltet nur rein-virtuelle klassen von denen die Module abstammen.

    Bitte sagt nicht, ich sollte etwas bereits im programm definieren, das projekt soll extrem modifizierbar sein.

    Danke im voraus


  • Mod

    lk schrieb:

    1: Was ist das beste tutorial für C++?

    Jedes und keines, denn das sollte überall drankommen, kommt aber nirgendwo dran 😉 .

    2: Geht das auch ohne extern "C" { } ?

    Kommt drauf an: Willst du deine eigene Bibliothek compilieren und dann in deinen eigenen Programmen benutzen? Falls ja, brauchst du kein "extern C". Falls du die Bibliothek im compilierten Zustand weitergeben willst um sie mit Programmen zu linken die mit anderen Compilern übersetzt wurden (möglicherweise sogar in anderen Sprachen geschrieben), solltest du "extern C" benutzen, denn bei C ist das Binärformat normiert und somit portabel, bei C++ kannst du hinterher nur Linken wenn alles vom gleichen Compiler übersetzt wurde. (Das heißt natürlich auch, dass die Bibliothek in diesem Fall in C geschrieben sein muss)

    3: Kann mir jemand ein einfaches beispiel mit vielen kommentaren beispiel geben ? (siehe unten)

    Ist ein bisschen betriebssystemabhängig, deshalb erstmal nur die allgemeine Vorgehensweise: Du schreibst dein Programm und deine Bibliotheken und linkst sie dynamisch. Wenn du das Programm dann aufrufst, musst du dem Bibliothekslader des Betriebssystems sagen, welche der Bibliotheken er laden soll. Je nach System ist es auch möglich, dies innerhalb des Programms zu tun.

    Bitte sagt nicht, ich sollte etwas bereits im programm definieren, das projekt soll extrem modifizierbar sein.

    Nicht nötig, dazu ist die Technik ja gerade da.



  • Danke für die antwort.

    Mein haupt-zielsystem ist Linux/Unix, portieren werde ich den server wahrscheinlich nicht.

    Ich will deshalb mit diesem kram arbeiten, damit andere sich Engines oder modifizierte module einfach runterladen können und benutzen, ohne das ding nochmal zu kompilieren. zB wenn eine neue version des protokolls rauskommt, einfach networks.so ersetzen.

    C eignet sich nicht, da in diesem project alles streng OOP ist. :p
    Bitte bitte ein Beispiel oder gutes tutorial.



  • Hier ein Beispiel fuer dynamic class loading: http://www.linuxjournal.com/article/3687 . Es ist wahrscheinlich nicht genau das, was du willst, da es eher Richtung plugin-System geht.



  • Ich habe ja schon gegooglet, und das bereits komplett durchgelesen. Genauso wie http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html (was sehr informant war, aber nicht in die richtung ging die ich gerne hätte).



  • Und wenn es da jetzt maker() in libtest1.so und maker() in libtest2.so giebt(oder eben zwei gleiche dinger), ist das nicht irgendwie falsh ?


  • Mod

    lk schrieb:

    Und wenn es da jetzt maker() in libtest1.so und maker() in libtest2.so giebt(oder eben zwei gleiche dinger), ist das nicht irgendwie falsh ?

    Nur wenn du beide gleichzeitig einem Linker übergibst.



  • lk schrieb:

    C eignet sich nicht, da in diesem project alles streng OOP ist. :p
    Bitte bitte ein Beispiel oder gutes tutorial.

    Sind wirklich Klassen notwendig um OOP zu programmieren? Wenn ich mir ein paar C-Libraries von GNOME ansehe, sind sie sehr schön OO designed.



  • JustAQuestion schrieb:

    Sind wirklich Klassen notwendig um OOP zu programmieren? Wenn ich mir ein paar C-Libraries von GNOME ansehe, sind sie sehr schön OO designed.

    Damit ist wahrscheinlich OOP im engstirnigen Sinne gemeint. Also obj.foo() , aber keinesfalls auch nur annähernd foo(obj) . 😉



  • Nur wenn du beide gleichzeitig einem Linker übergibst.

    Wenn man das Laden der Bibliotheken selbst uebernimmt, dann kann genau ausgewaehlt werden, welche Funktion aus welcher Bibliothek an welche Variable gebunden wird.



  • Ich weis nur die namen der Modul-Klassen. Alles andere sind engines, die von den modulen geladen werden. Jede Engine is dabei eine Bibliothek. Um ein Engine zu erschaffen würde ich gerne (wie vom tutorial) immer eine function wie maker() aufrufen, anstatt new 🙄 .

    Nächste Frage:
    5: Was genau passiert beim laden/benutzen/etc.. ?


Log in to reply