Qt: Anfängerfragen zu eigenen Bibliotheken
-
Sourcen kompilieren zu .o-Dateien und dann alle zusammenlinken entweder zu einer DLL oder zu einer statischen Library (bei VS .lib, bei GCC/MinGW/cygwin .a).
-
BertiV schrieb:
http://msdn.microsoft.com/en-us/library/ms235627(v=vs.80).aspx
Unkommentierte Links, die mir zeigen, dass dir das Problem so egal ist, dass du dir eigentlich den gesamten Post hättest sparen können, bitte unterlassen. Insbesondere, wenn der Link mir in keiner Weise hilft, da er nur triviale Informationen bietet und sich nicht auf Qt bezieht.
wxSkip schrieb:
Sourcen kompilieren zu .o-Dateien und dann alle zusammenlinken entweder zu einer DLL oder zu einer statischen Library (bei VS .lib, bei GCC/MinGW/cygwin .a).
Tut mir Leid, aber glaubst du wirklich, dass mir das hilft? Hast du meine Frage gelesen?
Ich kann in Qt Projekte für Libraries erstellen. Und ich könnte vermutlich auch eine vollständige Lib kompilieren. Meine genaue Frage aber war eher eine andere:
Ich würde gern eine Library mit einer Klasse erzeugen, von der weitere Libraries (bzw. die Klassen darin) abgeleitet werden sollen.
Wie strukturiert man das? Muss ich die Klasse, von der abgeleitet werden soll, in jede Lib mit einfügen? Es weiß doch bestimmt jemand in wenigen Worten Rat - ich würde mich darüber freuen.
PS: Die Libs sollen übrigens dynamisch verlinkt werden, falls das wichtig ist.
-
Deine eigentliche Frage ist eine Aussage und wurde wohl auch deshalb nicht als Kern deines Problems wahrgenommen. Für mich liest sich das aber immer noch so, als wüsstest du gerne, wie man Libs erstellt.
Mein Tip: Mach ein ganz einfaches Beispiel, eine einzige Lib, in die du ein eigenes Widget packst. In einer main (außerhalb der lib!) instantiierst du das Widget und zeigst es an. Du lernst dabei, wie man eine Lib erzeugt und wie man sie dann verwendet. Wenn du die beiden Sachen nicht drauf hast, erübrigt sich eigentlich jede weitere Diskussion.
-
Mal schauen, ob ich jetzt die Frage verstanden habe:
Du inkludierst einfach den Header der Library mit der Klasse und leitest die anderen Klassen von der Klasse ab. Beim Linken musst du entweder die alte Library und die neuen Libraries dazu linken oder die alte Library in die neuen Libraries mitreinpacken.Was mich noch wundert: Was hat hat deine Frage mit Qt zu tun?
-
Stiefel2000 schrieb:
BertiV schrieb:
http://msdn.microsoft.com/en-us/library/ms235627(v=vs.80).aspx
Unkommentierte Links, die mir zeigen, dass dir das Problem so egal ist, dass du dir eigentlich den gesamten Post hättest sparen können, bitte unterlassen. Insbesondere, wenn der Link mir in keiner Weise hilft, da er nur triviale Informationen bietet und sich nicht auf Qt bezieht.
Nur weil du zu beschränkt bist, aus dem Link die notwendigen Informationen zu extrahieren, ist der Link noch lange nicht überflüssig.
Qt ist eine C++-Klassenbibliothek, mein ahnungsloser Freund. Der von mir verlinkte Artikel gilt genauso für Qt, wie für jedes andere stinknormale C++-Projekt.
Ich schlage also vor, du hörst auf dich hier wichtig zu machen und erstellst eine Library, wie in dem MSDN-Link angegeben. So trivial scheint die Sache nämlich nicht zu sein, wenn du immer noch nicht weißt, wie es läuft.
Und auf deine angeblich wesentliche Frage zu sprechen zu kommen, wie man Ableitungen strukturiert. Man strukturiert sie, so wie in jedem anderen Projekt.
Wenn man Klassen aus einer Programmbibliothek nutzt, muss man die Header inkludieren und danach wird die neue Programmbibliothek mit den abgeleiteten Klassen erstellt. Je nachdem ob statisch oder dynamisch gelinkt wird, landen die Funktionen in der neuen Lib.
Das hättest du leich ausprobieren können, indem du das Beispiel in dem von mir verlinkten Artikel ausprobiert hättest, statt hier rumzupöbeln. Immerhin erwartest du die Hilfe, nicht wir!
Was mich noch wundert: Was hat hat deine Frage mit Qt zu tun?
Gar nichts. Er meint aber, es müsste ausschließlich Qt betreffen.
-
wxSkip schrieb:
Was mich noch wundert: Was hat hat deine Frage mit Qt zu tun?
Ich nutze Qt, will die Libs mit dem QtCreator erstellen und später in meinem Qt-Programm verwenden. Eventuell hätte ich meine Frage im C++-Forum stellen können - allerdings erhalte ich dann keine Antworten, die auf Qt zugeschnitten wären.
arghonaut schrieb:
Mein Tip: Mach ein ganz einfaches Beispiel, eine einzige Lib, in die du ein eigenes Widget packst.
Ich möchte gar kein Widget erstellen, sondern etwas ohne grafische Oberfläche (die bietet das Hauptprogramm).
Neuer Versuch:
class Top { public: Top(); private: virtual bool function(QString parameter); }; class Bottom1 : public Top { public: Bottom1(); private: bool function(QString parameter); }; class Bottom2 : public Top { public: Bottom2(); private: bool function(QString parameter); };
Die Bottom-Klassen sollen jeweils in eigene Libs. Was mache ich am besten mit der Top-Klasse? Ich will sie nicht in jede Lib hineinkopieren und mir damit spätere Änderungen erschweren oder die Libs aufblähen.
BertiV schrieb:
Ich schlage also vor, du hörst auf dich hier wichtig zu machen...
Dito.
Ich wollte nicht pöbeln. Allerdings gefällt mir die Friss-oder-stirb-Mentalität nicht, die hinter dem Posten eines blanken Links steckt. Ich fragte nach Hilfe, habe extra das Wort "Anfänger" im Titel verwendet.
-
Stiefel2000 schrieb:
Die Bottom-Klassen sollen jeweils in eigene Libs. Was mache ich am besten mit der Top-Klasse? Ich will sie nicht in jede Lib hineinkopieren und mir damit spätere Änderungen erschweren oder die Libs aufblähen.
Du kannst deine Top Klassen z.B. in eine eigene Dll packen und exportieren. Ist z.B. hier beschrieben:
http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL
-
Wie macht du es denn bisher mit Qt? Du bindest in deinem Header z.B. QWidget ein (include), du definierst eine Klasse MyWidget : public QWidget, in einer .cpp werden dann die Methoden definiert. Die ganzen .cpps werden kompiliert und dann zu einer .exe gelinkt - unter anderem gegen die libQtGui, in der auch die Implementierung von QWidget steckt.
Bei dir sollte es doch genauso funktionieren. Nur dass du zusätzlich noch eine lib erstellen willst. Deshalb bleibt mein Tip: lerne wie man eine lib erstellt (und benutzt), der Rest ergibt sich von allein!
-
Ich wüsste nicht, dass es spezielle Möglichkeiten gäbe - entweder, die Top-Klasse bekommt eine eigene Lib, sie kommt in eine der beiden Libs oder in beide - wobei die zweite Variante inkonsistent wäre, im Speziellen aber möglicherweise vertretbar...
-
Vielen Dank für den Link, Mechanics!
Jetzt habe ich einen soliden Startpunkt, danke für die Hilfe.