Risposte:
Il modo corretto per farlo è così:
LIBS += -L/path/to -lpsapi
In questo modo funzionerà su tutte le piattaforme supportate da Qt. L'idea è che devi separare la directory dal nome della libreria (senza l'estensione e senza alcun prefisso "lib"). Ovviamente, se includi una libreria specifica per Windows, questo non ha importanza.
Nel caso in cui desideri memorizzare i tuoi file lib nella directory del progetto, puoi fare riferimento ad essi con la $$_PRO_FILE_PWD_
variabile, ad esempio:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
qmake -tp vc
, non trovo nomi di librerie nel Additional Dependencies
progetto, ma il progetto vs funziona bene. Significa che ci sono altri metodi per aggiungere Additional Dependencies
vs?
LIBS += -lGdi32
.
LIBS + = C: \ Programmi \ OpenCV \ lib
non funzionerà perché stai utilizzando spazi vuoti in Programmi. In questo caso devi aggiungere virgolette, quindi il risultato sarà questo: LIBS + = "C: \ Program Files \ OpenCV \ lib" . Consiglio di posizionare le librerie in posizioni non in spazi vuoti ;-)
WINDIR = $$DIR
,WINDIR ~=s,/,\\,g
L'errore che intendi è dovuto alla mancanza del percorso di inclusione aggiuntivo. Prova ad aggiungerlo con: INCLUDEPATH + = C: \ path \ to \ include \ files \ Spero che funzioni. Saluti.
E per aggiungere più file di libreria puoi scrivere come di seguito:
INCLUDEPATH * = E: / DebugLibrary / VTK E: / DebugLibrary / VTK / Common E: / DebugLibrary / VTK / Filtering E: / DebugLibrary / VTK / GenericFiltering E: / DebugLibrary / VTK / Graphics 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 / Utilities E : / DebugLibrary / VTK / VolumeRendering E: / DebugLibrary / VTK / Widgets E: / DebugLibrary / VTK / Wrapping
LIBS * = -LE: / DebugLibrary / VTKBin / bin / rilasciare -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
Se desideri distribuire la tua applicazione sulle macchine dei clienti, piuttosto che utilizzare la tua applicazione solo tu stesso, scopriamo che il LIBS+= -Lxxx -lyyy
metodo può creare confusione se non problemi.
Sviluppiamo applicazioni per Linux, Mac e Windows utilizzando Qt. Spediamo applicazioni complete e autonome. Quindi tutte le librerie non di sistema dovrebbero essere incluse nel pacchetto di distribuzione. Vogliamo che i nostri clienti siano in grado di eseguire l'applicazione dalla stessa chiavetta USB per tutti i sistemi operativi. Per motivi di compatibilità della piattaforma, la chiavetta USB deve essere formattata come FAT32, che non supporta i collegamenti simbolici (Linux).
Abbiamo trovato l' LIBS+= -Lxxx -lyyy
idioma troppo di una scatola nera:
Non sappiamo esattamente quale sia il percorso file della libreria (statica o dinamica) che è stata trovata dal linker. Questo è scomodo. Il nostro linker per Mac trovava regolarmente librerie diverse da quelle che pensavamo dovessero essere utilizzate. Ciò è accaduto più volte con le librerie OpenSSL in cui il linker per Mac ha trovato e utilizzato la propria versione OpenSSL, più vecchia e incompatibile, anziché la versione richiesta.
Non possiamo permetterci che il linker utilizzi collegamenti simbolici alle librerie poiché ciò interromperebbe il pacchetto di distribuzione.
Vogliamo vedere dal nome della libreria se colleghiamo una libreria statica o dinamica.
Quindi per il nostro caso particolare usiamo solo percorsi di file assoluti e controlliamo se esistono. Rimuoviamo tutti i collegamenti simbolici.
Per prima cosa scopriamo quale sistema operativo stiamo utilizzando e lo inseriamo nella variabile CONFIG. E, ad esempio per Linux a 64 bit, quindi:
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
}
Tutte le dipendenze possono essere copiate nel pacchetto di distribuzione poiché conosciamo i loro percorsi di file.
Vorrei aggiungere per completezza che puoi anche aggiungere solo il PERCORSO DELLA LIBRERIA dove cercherà una libreria dipendente (che potrebbe non essere direttamente referenziata nel tuo codice ma una libreria che usi potrebbe averne bisogno).
Per confronto, ciò corrisponderebbe a ciò che fa l'ambiente LIBPATH ma è un po 'oscuro in Qt Creator e non ben documentato.
Il modo in cui sono arrivato a questo è il seguente:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
Essenzialmente se non si fornisce il nome effettivo della libreria, aggiunge il percorso in cui cercherà le librerie dipendenti. La differenza di sintassi è piccola ma è molto utile per fornire solo il PERCORSO dove cercare le librerie dipendenti. A volte è solo una seccatura fornire ogni singola libreria di percorso in cui sai che sono tutte in una determinata cartella e Qt Creator le raccoglierà.
in .pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
in .h / .cpp: #pragma comment(lib,"user32.lib")
#pragma comment(lib,"psapi.lib")