2009-09-01 16 views
32

Sto avendo un sacco di tempo per trovare la documentazione che spiega chiaramente come utilizzare una libreria statica in Qt Creator.Utilizzo di una libreria statica in Qt Creator

Ho creato e compilato la mia libreria statica utilizzando Qt Creator (New => Projects \ C++ Library => Imposta tipo su "Libreria collegata staticamente"). Compila e sputa un ".a file".

Il problema che si verifica è quando si tenta di utilizzare la libreria. Ho un altro progetto che vorrebbe usarlo (# include file nella libreria, ecc.) Ma non conosco il modo corretto di collegarmi alla libreria o includere file dalla libreria.

risposta

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

Nota! che il nome del file di lib: lib [nameOfLib] .a e devi passare unica parte originale -l [nameOfLib]

+1

Ho trovato la risposta su http://doc.trolltech.com/4.5/qmake-project-files.html#declaring-other-libraries poco dopo averla postata (ho cercato su Google cose stupide sul creatore piuttosto che girovagare in documenti qmake). Non so ancora cosa significhi -L o -l, ma tale è la natura dei makefile .. riga di comando gobbl-dee-gook che può essere facilmente analizzata in ... riga di comando gobble-dee-gook. La risposta del RPG è anche pertinente, la roba del includeepath è importante .. Ho segnato il tuo corretto perché anche il -L/-l sembra importante! –

+5

Questo non ha funzionato per me, ma un'altra risposta è stata fatta qui, che fa clic con il pulsante destro del mouse mentre si modifica il file .pro e si utilizza l'interfaccia utente "Aggiungi libreria". – andrewrk

15

Nel progetto che utilizza la libreria, impostare il punto variabile LIBS sul percorso della lib.
Per includere file dalla libreria, aggiungere la cartella della libreria a INCLUDEPATH e quindi eseguire un normale #include nei file di codice.

esempio:

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

Modificato:
-L dice qmake che il percorso è una directory che può cercare librerie -l dice che che il percorso è un file, ma prendere atto dell'osservazione di seguito.

Dalla documentazione QMake:

Questa variabile contiene una lista di librerie per essere collegato nel progetto . È possibile utilizzare i flag Unix -l (libreria) e -L (percorso libreria) e qmake farà la cosa corretta con queste librerie su Windows (vale a dire questo significa passare il completo percorso della libreria al linker) . L'unica limitazione a questa è la libreria deve esistere, per qmake per trovare quale directory a -l vive lib in

. Nota: su Windows, librerie specificando con l'opzione -l, come nel sopra esempio, causerà la libreria con il numero di versione più alto da utilizzare; ad esempio, libmath2.lib potrebbe essere utilizzato al posto di libmathlib. Per evitare questa ambiguità, , ti consigliamo esplicitamente di specificare per la libreria da incluso il suffisso del nome file .lib.

+0

Grazie per aver postato questa risposta. Ecco i link alle variabili LIBS e INCLUDEPATH dai documenti di Qt5: [LIBS] (http://doc.qt.io/qt-5/qmake-variable-reference.html#libs) e [INCLUDEPATH] (http://doc.qt.io/qt-5/qmake-variable-reference.html#includepath). – RAM

11

..da QT progetto creatore

  1. goto projectName.pro dal menu a sinistra
  2. tipo LIBS + =
  3. rightClick AddLibrary
+7

digitando 'LIBS + =' non è necessario. Puoi abbreviare questo a 2 passi. – andrewrk

+0

In realtà questa è l'unica soluzione che potrei ricavare da tutte le risposte. Come suggerito da andrewrk, non è necessario digitare LIBS + =. Tutto quello di cui hai bisogno è andare sul file .pro, fare clic con il tasto destro del mouse, Aggiungi libreria e lasciare che QtCreator generi le linee di codice richieste (che BTW, sul mio sistema [Qt 5.4, Linux], sembrava abbastanza diverso da quanto suggerito in altri risposte.) – Karpov

3

È

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

o

LIBS += -L/somepath -lsomename.a 

o

LIBS += -L/somepath -lsomename" 

Questo dovrebbe essere facile come si ottiene, ma per qualche motivo è ESTREMAMENTE difficile tirare su un risultato di ricerca perché ci sono così tanti successi di forum di persone che chiedono aiuto e ho seguito ogni consiglio che posso ottenere ma no Aiuto ...

+1

troverai la tua risposta in Risvegliente risposta – Coren

+0

Le prime due varianti non funzionano per me su Linux. – Temak

8

la variante

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

non funziona se si dispone di entrambe le statiche e dinamiche libLIBNAME.alibLIBNAME.so librerie nella stessa cartella PATH_TO_LIB_DIR.
In questo caso sul mio linux con QMake v 3.0 quello dinamico è collegato per impostazione predefinita.
A collegamento di forza con statico uno è necessario specificarlo esplicitamente senza alcuna opzione.

LIBS += PATH_TO_LIB_DIR/libLIBNAME.a 
+0

Ho notato qualcosa di simile: se c'è una 'module.dll' e una' libmodule.a' nella stessa cartella e includo la dll con '-L -l ', ricevo un errore di definizioni multiple. Tuttavia, se elimino il file lib statico (.a), allora funziona. Non sono sicuro se questa sia stata una coincidenza o un comportamento previsto ... – user2366975