2009-09-01 3 views
32

Ich habe eine Menge Zeit, eine Dokumentation zu finden, die klar erklärt, wie man eine statische Bibliothek in Qt Creator verwendet.Verwenden einer statischen Bibliothek in Qt Creator

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 benutzen möchte (#include Dateien in der Bibliothek, usw.), aber ich weiß nicht die richtige Weise, mit der Bibliothek zu verbinden oder Dateien von der Bibliothek einzuschließen.

Antwort

34
LIBS += -L[path to lib] -l[name of lib] 

Hinweis! dass Dateinamen von lib: lib [nameOfLib] .a und Sie haben nur Originalteil -l [nameOfLib]

+1

Ich fand die Antwort auf http://doc.trolltech.com/4.5/qmake-project-files.html#deklaring-other-libraries kurz nachdem ich sie gepostet hatte (hatte dummes Zeug über den Schöpfer gegoogelt, anstatt einfach in qmake docs zu wandern). Ich weiß immer noch nicht, was die -L oder -l bedeuten, aber so ist die Natur der Makefiles .. Befehlszeile gobbl-dee-gook, die leicht in ... Befehlszeile verschlungen werden kann gobble-dee-gook. RPG's Antwort ist auch relevant, die Includepath Zeug ist wichtig .. Ich markiert Ihre richtig, weil die -L/-l auch wichtig scheinen! –

+5

Dies funktionierte nicht für mich, aber eine andere Antwort hier, die mit der rechten Maustaste während der Bearbeitung der. Pro-Datei und der Verwendung der "Add Library" UI. – andrewrk

15

In Ihrem Projekt, das die Bibliothek verwendet, machen Sie den LIBS Variablenpunkt auf den Pfad Ihrer Bibliothek.
Um Dateien aus der Bibliothek einzuschließen, fügen Sie den Bibliotheksordner zu INCLUDEPATH hinzu und führen Sie dann ein reguläres #Include in Ihren Code-Dateien aus.

zB:

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

Edited:
-L sagt qmake, dass der Pfad ein Verzeichnis ist, dass es für Bibliotheken suchen -l es sagt, dass der Pfad eine Datei ist, aber zur Kenntnis nehmen der Beobachtung unten.

Aus dem Qmake docs:

Diese Variable enthält eine Liste von Bibliotheken in das Projekt verknüpft werden. Sie können die Unix-l (Bibliothek) und -L (Bibliothek Pfad) Flags und qmake wird die richtige Sache mit diesen Bibliotheken unter Windows (dh dies bedeutet die Übergabe der vollen Pfad der Bibliothek an den Linker) . Die einzige Einschränkung ist dies die Bibliothek vorhanden sein muss, für qmake zu finden, das Verzeichnis ein -l lib Lebens in

. Hinweis: Unter Windows Angabe Bibliotheken mit der Option -l, wie in den oben Beispiel, wird die Bibliothek mit die höchste Versionsnummer verwendet werden; zum Beispiel könnte libmath2.lib möglicherweise anstelle von libmathlib verwendet werden. Um diese Mehrdeutigkeit zu vermeiden, empfehlen wir Ihnen, explizit anzugeben, welche Bibliothek von einschließlich des Suffix .lib Dateiname verwendet werden soll.

+0

Vielen Dank für das Posten dieser Antwort. Hier finden Sie die Links zu den Variablen LIBS und INCLUDEPATH aus den Qt5-Dokumenten: [LIBS] (http://doc.qt.io/qt-5/qmake-variable-reference.html#libs) und [INCLUDEPATH] (http://doc.qt.io/qt-5/qmake-variable-reference.html#includepath). – RAM

11

..von QT Projektersteller

  1. goto Projektname zu übergeben.Pro von der linken Seite im Menü
  2. Typ LIBS + =
  3. rightclick AddLibrary
+7

Eingabe von 'LIBS + =' ist nicht notwendig. Sie können dies auf 2 Stufen verkürzen. – andrewrk

+0

Eigentlich ist dies die einzige Lösung, die ich aus allen Antworten herausarbeiten könnte. Wie andrewrk vorgeschlagen hat, müssen Sie LIBS + = nicht eingeben. Alles, was Sie brauchen, ist, in die .pro-Datei zu gehen, mit der rechten Maustaste, Bibliothek hinzufügen, und QtCreator erzeugt die erforderlichen Zeilen Code (welcher BTW auf meinem System [Qt 5.4, Linux], sah ziemlich anders aus als in anderen vorgeschlagen) Antworten.) – Karpov

3

Ist es

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

oder

LIBS += -L/somepath -lsomename.a 

oder

LIBS += -L/somepath -lsomename" 

Das sollte so einfach wie möglich sein, aber aus irgendeinem Grund ist es EXTREM schwierig, ein Suchergebnis aufzurufen, weil es so viele Hits von Foren gibt, die Leute um Hilfe bitten, und ich habe jeden Tipp befolgt, den ich bekommen kann, aber nein helfen ...

+1

Sie finden Ihre Antwort in Dewfy Antwort – Coren

+0

Erste zwei Varianten funktionieren nicht für mich unter Linux. – Temak

8

die Variante

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

nicht, wenn Sie beide statische und dynamische libLIBNAME.alibLIBNAME.so libs im selben Ordner PATH_TO_LIB_DIR haben nicht funktioniert.
In diesem Fall auf meinem Linux mit QMake v 3.0 der dynamische ist standardmäßig verknüpft.
Um zwingen Verknüpfung mit statischen man Sie explizit ohne Optionen angeben müssen.

LIBS += PATH_TO_LIB_DIR/libLIBNAME.a 
+0

Ich bemerkte etwas simpliar: Wenn es eine 'modul.dll' und eine' libmodule.a' im selben Ordner gibt und ich die DLL mit '-L -l ' einschließe, bekomme ich einen Mehrfachdefinitionsfehler. Wenn ich jedoch die statische lib-Datei (.a) lösche, funktioniert es. Nicht sicher, ob dies ein Zufall oder erwartetes Verhalten war ... – user2366975