Come posso impostare in cui un'applicazione Qt trova un modulo Qt?
-
21-09-2019 - |
Domanda
Vorrei includere libQtGui.so.4 libQtNetwork.so.4 e libQtCore.so.4 nella stessa directory in cui risiede la mia app. Come farei Qt capire questo? y scopo è quello di avere un'applicazione stand-alone che utilizza le librerie condivise
Soluzione
Impostazione della variabile d'ambiente LD_LIBRARY_PATH è un'opzione. Ad esempio:
export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH
Un'altra opzione è quella di impostare il RPATH della vostra applicazione Qt durante il collegamento. Impostazione del RPATH al valore "$ ORIGIN" farà sì che il linker dinamico di guardare nella stessa directory come l'applicazione Qt in fase di esecuzione. Ad esempio, se si utilizza qmake, aggiungere il seguente frammento di codice al file di progetto:
unix:!mac{
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs
QMAKE_RPATH=
}
Questo imposterà la RPATH a "$ ORIGIN: $ ORIGIN / lib: $ ORIGIN / librerie", il che significa che il linker dinamico cercherà prima nella posizione della vostra applicazione Qt, poi in una sottodirectory lib nella sua posizione, quindi in una sottodirectory librerie nella sua posizione, e, infine, in qualsiasi sistema posizioni definite.
Altri suggerimenti
UNIX / Linux è andare a guardare in LD_LIBRARY_PATH (se impostato) prima di guardare nelle librerie standard e di sistema. Quindi, se si imposta che, si può infatti ignorare. Proprio come l'impostazione del PATH su Windows. Stesso effetto. Gli argomenti di ordinamento.
È possibile aggiungere ./ o. a LD_LIBRARY_PATH pure.
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
LD_LIBRARY_PATH
e QMAKE_RPATH
mai lavorato per me. Invece, ho impostato QMAKE_RPATHDIR
nel mio file .pro
. Ad esempio, dopo aver costruito e installato (make install
) Qt, è stato posto in /usr/local/Trolltech/Qt-4.8.5/lib/
. Ho poi scrivere nel mio file .pro
:
QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/
Nota 1: percorsi relativi sembrano non funzionare. Preferisco percorsi assoluti.
Nota 2: Quando si allora make
, si può vedere che la seguente opzione è dato al linker: -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/
Nota 3: per essere sicuri che i collegamenti binari in modo dinamico alla libreria corretta, è possibile visualizzare la versione di Qt in fase di esecuzione consegnato da qVersion()
.