moc-Objektdatei und eigene Objektdatei zusammenführen
Verfasst: 12. Juli 2011 22:20
Hi,
Habe zwei Qt-Projekte, wobei Projekt A eine Klasse "AKlasse" in einem eigenen cpp/h-Dateipärchen definiert, welche von QObject abgeleitet ist. Ergo entstehen im Verzeichnis von Projekt A die Objektdateien "aklasse.o" und "moc_aklasse.o".
Wenn ich nun in Projekt B diese Klasse verwenden möchte, ohne das cpp/h-Pärchen zum Projekt hinzuzufügen (wird sonst extrem unübersichtlich), muss ich dem Linker per LIBS in der Projektdatei sagen, dass er mit "aklasse.o" und "moc_aklasse.o" verlinken soll, und natürlich den entsprechenden Header "aklasse.h" includen.
Wenn ich nur mit "aklasse.o" verlinke, bekomme ich einen Haufen reference-to-vtable-Fehler. Wie ich hier im Forum gelesen habe, liegt das wohl an virtuellen Funktionen des QObjects, die der moc schließlich implementiert und in die "moc_aklasse.o" steckt.
Nun zur Frage: Wie schaffe ich, dass ich nur gegen eine Objektdatei linken muss. Für jede Klasse extra nochmal diese moc-Objekdatei reinzulinken ist nervig und nach meinem Geschmack unsauber, da eine einzelne Klasse in zwei Objektdateien zerrissen wird. Kann man dem moc+gcc-Gespann irgendwie verklickern, dass sie bitteschön alles in die "aklasse.o" packen sollen?
MfG,
Spinoza
Habe zwei Qt-Projekte, wobei Projekt A eine Klasse "AKlasse" in einem eigenen cpp/h-Dateipärchen definiert, welche von QObject abgeleitet ist. Ergo entstehen im Verzeichnis von Projekt A die Objektdateien "aklasse.o" und "moc_aklasse.o".
Wenn ich nun in Projekt B diese Klasse verwenden möchte, ohne das cpp/h-Pärchen zum Projekt hinzuzufügen (wird sonst extrem unübersichtlich), muss ich dem Linker per LIBS in der Projektdatei sagen, dass er mit "aklasse.o" und "moc_aklasse.o" verlinken soll, und natürlich den entsprechenden Header "aklasse.h" includen.
Wenn ich nur mit "aklasse.o" verlinke, bekomme ich einen Haufen reference-to-vtable-Fehler. Wie ich hier im Forum gelesen habe, liegt das wohl an virtuellen Funktionen des QObjects, die der moc schließlich implementiert und in die "moc_aklasse.o" steckt.
Nun zur Frage: Wie schaffe ich, dass ich nur gegen eine Objektdatei linken muss. Für jede Klasse extra nochmal diese moc-Objekdatei reinzulinken ist nervig und nach meinem Geschmack unsauber, da eine einzelne Klasse in zwei Objektdateien zerrissen wird. Kann man dem moc+gcc-Gespann irgendwie verklickern, dass sie bitteschön alles in die "aklasse.o" packen sollen?
MfG,
Spinoza