Question

Comment puis-je ajouter bibliothèque externe dans un projet construit par Qt Creator RC1 (version 0.9.2)? Par exemple, la fonction win32 EnumProcesses() nécessite Psapi.lib à ajouter dans le projet de construction.

Était-ce utile?

La solution

La bonne façon de le faire est comme ceci:

LIBS += -L/path/to -lpsapi

De cette façon, il fonctionnera sur toutes les plateformes prises en charge par Qt. L'idée est que vous devez séparer le répertoire du nom de la bibliothèque (sans l'extension et sans préfixe « lib »). Bien sûr, si vous incluez une lib spécifique à Windows, cela n'a pas d'importance.

Si vous souhaitez stocker vos fichiers lib dans le répertoire du projet, vous pouvez les référencer avec la variable $$_PRO_FILE_PWD_, par exemple:.

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi

Autres conseils

Utilisez-vous des projets de qmake? Si oui, vous pouvez ajouter une bibliothèque externe en utilisant LIBS variable. Par exemple:

win32:LIBS += path/to/Psapi.lib
  

LIBS + = C: \ Program Files \ OpenCV \ lib

ne fonctionnera pas parce que vous utilisez-espaces blancs dans Program Files. Dans ce cas, vous devez ajouter des guillemets, de sorte que le résultat ressemblera à ceci: LIBS + = "C: \ Program Files \ OpenCV \ lib" . Je recommande bibliothèques placer dans des endroits non-espace blanc; -)

L'erreur que vous voulez dire est dû inclure supplémentaire manquant chemin. Essayez d'ajouter avec: INCLUDEPATH + = C: \ chemin \ \ \ fichiers include \ Esperons que ça marche. Cordialement.

Et pour ajouter des fichiers de bibliothèque, vous pouvez écrire plusieurs comme ci-dessous:

  

INCLUDEPATH * = E: / DebugLibrary / VTK E: / DebugLibrary / VTK / commune   E: / DebugLibrary / VTK / Filtrage E: / DebugLibrary / VTK / GenericFiltering   E: / DebugLibrary / VTK / Graphics E: / DebugLibrary / VTK / GUISupport / Qt   E: / DebugLibrary / VTK / hybride E: / DebugLibrary / VTK / Imagerie   E: / DebugLibrary / VTK / IO E: / DebugLibrary / VTK / Parallel   E: / DebugLibrary / VTK / Rendu E: / DebugLibrary / VTK / Utilitaires   E: / DebugLibrary / VTK / E rendu volumique direct: / DebugLibrary / VTK / Widgets   E: / DebugLibrary / VTK / Emballage

     

* = LIBS -LE: / DebugLibrary / VTKBin / bin / release -lvtkCommon -lvtksys   -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering

Si vous voulez déployer votre application sur les machines des clients, plutôt que d'utiliser votre application que vous-même, nous constatons que la méthode LIBS+= -Lxxx -lyyy peut conduire à la confusion, voire des problèmes.

Nous développons des applications pour Linux, Mac et Windows en utilisant Qt. Nous expédions complets, des applications autonomes. Donc, toutes les bibliothèques non-système doivent être inclus dans le package de déploiement. Nous voulons que nos clients soient en mesure d'exécuter l'application de la même clé USB pour tous les systèmes d'exploitation. Pour des raisons de compatibilité de la plate-forme la clé USB doit ensuite être formaté en FAT32, qui ne supporte pas (Linux) des liens symboliques.

Nous avons trouvé l'idiome LIBS+= -Lxxx -lyyy trop d'une boîte noire:

  1. Nous ne savons pas exactement ce que le filePath de la bibliothèque (statique ou dynamique) qui a été trouvé par l'éditeur de liens. Ceci est pratique. Notre éditeur de liens Mac trouve régulièrement libs différents de ceux que nous pensions que cela devrait être utilisé. Cela est arrivé à plusieurs reprises avec les bibliothèques OpenSSL où l'éditeur de liens Mac trouvé et utilisé ses propres - plus, incompatible -. OpenSSL version plutôt que notre version demandée

  2. Nous ne pouvons pas permettre que l'éditeur de liens utilise des liens symboliques aux bibliothèques comme cela casserait le package de déploiement.

  3. Nous voulons voir du nom de la bibliothèque que nous associons une statique ou une bibliothèque dynamique.

Donc, pour notre cas particulier, nous utilisons seulement absolus et vérifier les chemins de fichiers s'ils existent. Nous retirons tous les liens symboliques.

Tout d'abord, nous trouvons ce système d'exploitation que nous utilisons et mettons cela dans la variable CONFIG. Et, par exemple pour Linux 64 bits, puis:

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
}

Toutes les dépendances peuvent être copiées dans le paquet de déploiement que nous connaissons leurs chemins de fichiers.

Je voudrais ajouter un souci d'exhaustivité que vous pouvez ajouter juste la Bibliothèque PATH où il cherchera une bibliothèque dépendante (qui dans votre code ne peut pas être référencé directement, mais une bibliothèque que vous utilisez peut avoir besoin).

A titre de comparaison, cela correspondrait à ce que l'environnement LIBPATH ne, mais ce genre d'obscur dans Qt Creator et pas bien documenté.

La façon dont je suis autour de ce suit:

LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"

Pour l'essentiel si vous ne fournissez pas le nom de la bibliothèque réelle, il ajoute le chemin où il recherchera les bibliothèques dépendantes. La différence de syntaxe est petite mais cela est très utile pour fournir tout le chemin où chercher des bibliothèques dépendantes. Il est parfois juste une douleur à fournir chaque chemin chaque bibliothèque où vous savez qu'ils sont dans certains dossiers et Qt Creator les ramassera.

.pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib

.h / Cpp: #pragma comment(lib,"user32.lib")

#pragma comment(lib,"psapi.lib")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top