Wie kann ich einem von Qt Creator RC1 (Version 0.9.2) erstellten Projekt eine externe Bibliothek hinzufügen? Zum Beispiel kann die win32 - Funktion EnumProcesses()
erfordert Psapi.lib
in dem Projekt zu erstellen hinzugefügt werden.
c++
winapi
qt
qt-creator
Donotalo
quelle
quelle
qmake -tp vc
, finde ich keine libs-Namen imAdditional Dependencies
Projekt, aber das vs-Projekt läuft gut. Bedeutet das, dass es einige andere Methoden gibt, umAdditional Dependencies
vs hinzuzufügen ?LIBS += -lGdi32
.Verwenden Sie
qmake
Projekte? In diesem Fall können Sie mithilfe derLIBS
Variablen eine externe Bibliothek hinzufügen . Z.B:quelle
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 ;-)
quelle
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.
quelle
Und um mehrere Bibliotheksdateien hinzuzufügen, können Sie wie folgt schreiben:
quelle
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:
Alle Abhängigkeiten können in das Bereitstellungspaket kopiert werden, da wir ihre Dateipfade kennen.
quelle
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:
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.
quelle
in .pro:
LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
in .h / .cpp:
#pragma comment(lib,"user32.lib")
quelle