wake-up-neo.com

Verwenden einer statischen Bibliothek in Qt Creator

Ich habe verdammt viel Zeit damit, eine Dokumentation zu finden, die klar erklärt, wie man eine statische Bibliothek in Qt Creator verwendet.

Ich habe meine statische Bibliothek mit Qt Creator erstellt und kompiliert (Neu => Projekte\C++ - Bibliothek => Typ auf "Statisch verknüpfte Bibliothek" setzen). Es kompiliert und spuckt eine ".a-Datei" aus.

Das Problem, auf das ich stoße, ist, wenn ich versuche, die Bibliothek zu verwenden. Ich habe ein anderes Projekt, das es verwenden möchte (#Include-Dateien in der Bibliothek usw.), aber ich kenne nicht den richtigen Weg, um eine Verknüpfung mit der Bibliothek herzustellen oder Dateien aus der Bibliothek einzuschließen.

35
Dan O
LIBS += -L[path to lib] -l[name of lib]

Hinweis! der Dateiname von lib: lib [nameOfLib] .a und Sie müssen nur den Originalteil -l [nameOfLib] übergeben

35
Dewfy

Stellen Sie in Ihrem Projekt, das die Bibliothek verwendet, die Variable LIBS auf den Pfad Ihrer Bibliothek.
Um Dateien aus der Bibliothek einzuschließen, fügen Sie den Bibliotheksordner zum INCLUDEPATH hinzu und fügen Sie dann einen regulären # include in Ihre Codedateien ein.

z.B:

# the binary's .pro  
LIBS += c:/mylibs/math.lib
INCLUDEPATH += c:/mylibs

Bearbeitet:
- L teilt qmake mit, dass der Pfad ein Verzeichnis ist, in dem nach Bibliotheken gesucht werden kann. -L teilt mit, dass der Pfad eine Datei ist. Beachten Sie jedoch die nachstehende Beobachtung.

Aus den qmake-Dokumenten:

Diese Variable enthält eine Liste der Bibliotheken, die in das Projekt eingebunden werden sollen. Sie können die Unix-Flags -l (Bibliothek) und -L (Bibliothekspfad) verwenden, und qmake erledigt mit diesen Bibliotheken unter Windows das Richtige (dh, Sie übergeben den vollständigen Pfad der Bibliothek an den Linker). Die einzige Einschränkung hierfür ist, dass die Bibliothek vorhanden sein muss, damit qmake das Verzeichnis findet, in dem sich eine -l lib befindet.

Hinweis: Wenn Sie unter Windows wie im obigen Beispiel Bibliotheken mit der Option -l angeben, wird die Bibliothek mit der höchsten Versionsnummer verwendet. Beispielsweise könnte möglicherweise libmath2.lib anstelle von libmathlib verwendet werden. Um diese Mehrdeutigkeit zu vermeiden, empfehlen wir, die zu verwendende Bibliothek explizit anzugeben, indem Sie das Dateinamensuffix .lib einfügen.

17
rpg

..vom ​​QT-Projektersteller

  1. gehen Sie im Menü auf der linken Seite zu projectName.pro
  2. geben Sie LIBS + = ein
  3. rightClick AddLibrary
15

Die Variante

 LIBS += -L[PATH_TO_LIB_DIR] -l[LIBNAME] 

funktioniert nicht, wenn Sie sowohl statische libLIBNAME.a als auch dynamische libLIBNAME.so Bibliotheken im selben Ordner PATH_TO_LIB_DIR haben.
In diesem Fall ist auf meinem Linux mit QMake v 3.0 das dynamische standardmäßig verlinkt.
Um Verknüpfung mit Static erzwingen zu können, müssen Sie es explizit ohne Optionen angeben.

LIBS += PATH_TO_LIB_DIR/libLIBNAME.a
10
Temak

Ist es

LIBS += -L"/some path" -l"somename.a"

oder

LIBS += -L/somepath -lsomename.a

oder

LIBS += -L/somepath -lsomename"

Dies sollte so einfach wie möglich sein, aber aus irgendeinem Grund ist es EXTREM schwierig, ein Suchergebnis zu finden, da es so viele Forenhits von Menschen gibt, die um Hilfe bitten, und ich habe jeden Tipp befolgt, den ich bekommen kann, aber keine Hilfe. ..

2
Know-One