Frage

Wie ich in einer früheren Frage sagte, plane ich, ein QT -Projekt von VC ++ nach QTCreator zu portieren.

Das Projekt besteht aus 4 Unterprojekten: 3 davon sind Libs und das letzte macht das Exe. Die Unterprojekte sind geschichtet, was bedeutet, dass jede Schicht Zeitabhängigkeiten mit den darunter liegenden Schichten kompilieren und verbinden.

Die Dateien sind wie folgt organisiert:

root
  lib1
  lib2
  lib3
  main

Ich habe jedes der Unterprojekte in Qtcreator von Grund auf neu erstellt. Jeder Ordner enthält eine Pro -Datei mit demselben Namen (zB: lib1 -> lib1.pro). Mit diesem Ansatz habe ich alle Projekte mit Ausnahme der letzten gebaut, die die ausführbare Datei verknüpfen muss. Ich habe Linkerfehler erhalten, die ich durch manuelles Bearbeiten der Pro -Datei und den folgenden Code fixiert habe:

LIBS +=  ../path/lib1.a \
   ../path/lib2.a \
   ../path/lib3.a

Alles ist in Ordnung, außer dass lib3 sich darüber beschwert, dass es die Symbole von Lib2 und Lib1 nicht finden kann. Fügen Sie die lib2.Pro -Datei hinzu, funktioniert nicht.

Ich habe das Gefühl, dass ich nicht so bekomme, wie Qtcreator mit LIBS und Executables arbeitet. Wie würden Sie ein solches Projekt so organisieren, dass es richtig kompiliert und verbindet?

War es hilfreich?

Lösung

Nachdem ich noch mehr an dem Problem gearbeitet hatte, erinnerte ich mich, dass für die GCC -Werkzeugkette die Reihenfolge der Linkerparameter wichtig ist.

Die Umkehrung der LIBS -Einträge machte den Trick.

Andere Tipps

Ich bin froh zu sehen, dass Sie die Antwort gefunden haben. Möglicherweise möchten Sie auch hinzufügen:

CONFIG += ordered

In Ihre Root -Verzeichnisse .Pro -Datei (sie gilt nur in dem Profil der 'Subdirs). Es zwingt QMake, Makefiles zu erzeugen, die die Reihenfolge bewahren, in der Sie sie unter allen Umständen aufgelistet haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top