Antworten:
Der richtige Weg, dies zu tun, ist wie folgt:
LIBS += -L/path/to -lpsapi
Auf diese Weise funktioniert es auf allen von Qt unterstützten Plattformen. Die Idee ist, dass Sie das Verzeichnis vom Bibliotheksnamen trennen müssen (ohne die Erweiterung und ohne das Präfix 'lib'). Wenn Sie eine Windows-spezifische Bibliothek einbinden, spielt dies natürlich keine Rolle.
Wenn Sie Ihre lib-Dateien im Projektverzeichnis speichern möchten, können Sie sie mit der $$_PRO_FILE_PWD_
Variablen referenzieren , z.
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
qmake -tp vc
, finde ich keine libs-Namen im Additional Dependencies
Projekt, aber das vs-Projekt läuft gut. Bedeutet das, dass es einige andere Methoden gibt, um Additional Dependencies
vs hinzuzufügen ?
LIBS += -lGdi32
.
Verwenden Sie qmake
Projekte? In diesem Fall können Sie mithilfe der LIBS
Variablen eine externe Bibliothek hinzufügen . Z.B:
win32:LIBS += path/to/Psapi.lib
LIBS + = C: \ Programme \ OpenCV \ lib
funktioniert nicht, weil Sie Leerzeichen in Programmdateien verwenden. In diesem Fall müssen Sie Anführungszeichen hinzufügen, damit das Ergebnis folgendermaßen aussieht: LIBS + = "C: \ Programme \ OpenCV \ lib" . Ich empfehle, Bibliotheken an Orten ohne Leerzeichen zu platzieren ;-)
WINDIR = $$DIR
,WINDIR ~=s,/,\\,g
Der Fehler, den Sie meinen, ist auf einen fehlenden zusätzlichen Include-Pfad zurückzuführen. Versuchen Sie es mit: INCLUDEPATH + = C: \ path \ to \ include \ files \ Hoffe, dass es funktioniert. Grüße.
Und um mehrere Bibliotheksdateien hinzuzufügen, können Sie wie folgt schreiben:
INCLUDEPATH * = E: / DebugLibrary / VTK E: / DebugLibrary / VTK / Common E: / DebugLibrary / VTK / Filterung E: / DebugLibrary / VTK / GenericFiltering E: / DebugLibrary / VTK / Grafik E: / DebugLibrary / VTK / GUISupport / Qt E: / DebugLibrary / VTK / Hybrid E: / DebugLibrary / VTK / Imaging E: / DebugLibrary / VTK / IO E: / DebugLibrary / VTK / Parallel E: / DebugLibrary / VTK / Rendering E: / DebugLibrary / VTK / Dienstprogramme E. : / DebugLibrary / VTK / VolumeRendering E: / DebugLibrary / VTK / Widgets E: / DebugLibrary / VTK / Wrapping
LIBS * = -LE: / DebugLibrary / VTKBin / bin / release -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
Wenn Sie Ihre Anwendung auf Kundencomputern bereitstellen möchten, anstatt Ihre Anwendung nur selbst zu verwenden, LIBS+= -Lxxx -lyyy
kann die Methode zu Verwirrung führen, wenn nicht sogar zu Problemen.
Wir entwickeln Anwendungen für Linux, Mac und Windows mit Qt. Wir versenden komplette, eigenständige Anwendungen. Daher sollten alle Nicht-Systembibliotheken im Bereitstellungspaket enthalten sein. Wir möchten, dass unsere Kunden die Anwendung für alle Betriebssysteme von demselben USB-Stick ausführen können. Aus Gründen der Plattformkompatibilität muss der USB-Stick dann als FAT32 formatiert werden, das keine (Linux-) Symlinks unterstützt.
Wir fanden die LIBS+= -Lxxx -lyyy
Redewendung zu sehr wie eine Black Box:
Wir wissen nicht genau, wie der Dateipfad der (statischen oder dynamischen) Bibliothek lautet, die vom Linker gefunden wurde. Dies ist unpraktisch. Unser Mac-Linker fand regelmäßig andere Bibliotheken als die, von denen wir dachten, dass sie verwendet werden sollten. Dies geschah mehrmals mit OpenSSL-Bibliotheken, in denen der Mac-Linker eine eigene - ältere, inkompatible - OpenSSL-Version anstelle unserer angeforderten Version fand und verwendete.
Wir können es uns nicht leisten, dass der Linker Symlinks zu Bibliotheken verwendet, da dies das Bereitstellungspaket beschädigen würde.
Wir möchten anhand des Namens der Bibliothek sehen, ob wir eine statische oder eine dynamische Bibliothek verknüpfen.
Für unseren speziellen Fall verwenden wir also nur absolute Dateipfade und prüfen, ob sie vorhanden sind. Wir entfernen alle Symlinks.
Zuerst finden wir heraus, welches Betriebssystem wir verwenden, und fügen dies in die Variable CONFIG ein. Und zum Beispiel für Linux 64bit:
linux64 {
LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a
!exists($$LIBSSL): error ("Not existing $$LIBSSL")
LIBS+= $$LIBSSL
LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a
!exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO")
LIBS+= $$LIBCRYPTO
}
Alle Abhängigkeiten können in das Bereitstellungspaket kopiert werden, da wir ihre Dateipfade kennen.
Der Vollständigkeit halber möchte ich hinzufügen, dass Sie auch nur den LIBRARY PATH hinzufügen können, in dem nach einer abhängigen Bibliothek gesucht wird (auf die in Ihrem Code möglicherweise nicht direkt verwiesen wird, die von Ihnen verwendete Bibliothek jedoch möglicherweise benötigt wird).
Zum Vergleich würde dies dem entsprechen, was die LIBPATH-Umgebung tut, aber es ist in Qt Creator dunkel und nicht gut dokumentiert.
Die Art und Weise, wie ich dazu kam, ist folgende:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
Wenn Sie den tatsächlichen Bibliotheksnamen nicht angeben, wird im Wesentlichen der Pfad hinzugefügt, zu dem abhängige Bibliotheken durchsucht werden. Der Unterschied in der Syntax ist gering, aber dies ist sehr nützlich, um nur den Pfad anzugeben, in dem nach abhängigen Bibliotheken gesucht werden soll. Manchmal ist es nur mühsam, jedem Pfad eine einzelne Bibliothek zur Verfügung zu stellen, von der Sie wissen, dass sie sich alle in einem bestimmten Ordner befinden, und Qt Creator wird sie abholen.
in .pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
in .h / .cpp: #pragma comment(lib,"user32.lib")
#pragma comment(lib,"psapi.lib")