Como posso definir onde um aplicativo Qt encontra um módulo Qt?
-
21-09-2019 - |
Pergunta
Gostaria de incluir libQtGui.so.4 libQtNetwork.so.4 e libQtCore.so.4 no mesmo diretório onde meu aplicativo reside.Como eu faria o Qt entender isso?meu objetivo é ter um aplicativo independente que use bibliotecas compartilhadas
Solução
Definir a variável de ambiente LD_LIBRARY_PATH é uma opção. Por exemplo:
export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH
Outra opção é definir o RPath do seu aplicativo QT durante a vinculação. Definir o RPath para o valor "$ origem" fará com que o vinculador dinâmico procure no mesmo diretório do seu aplicativo QT no tempo de execução. Por exemplo, se estiver usando o QMake, adicione o seguinte snippet ao seu arquivo de projeto:
unix:!mac{
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs
QMAKE_RPATH=
}
Isso definirá o RPath como "$ origem: $ origem/lib: $ origem/libs", o que significa que o ligante dinâmico procurará primeiro na localização do seu aplicativo QT e depois em um subdiretório Lib em seu local e depois em um LIBS subdiretório em seu local e, finalmente, em qualquer sistema definido pelo sistema.
Outras dicas
UNIX/Linux irá procurar em LD_LIBRARY_PATH (se definido) primeiro antes de procurar nas bibliotecas padrão do sistema.Então, se você definir isso, poderá realmente substituir.Assim como definir o PATH no Windows.Mesmo efeito.A ordem é importante.
Você pode adicionar ./ ou .para LD_LIBRARY_PATH também.
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
LD_LIBRARY_PATH
e QMAKE_RPATH
nunca funcionou para mim. Em vez disso, eu defino QMAKE_RPATHDIR
no meu .pro
Arquivo. Por exemplo, depois de ter construído e instalado (make install
) Qt, foi colocado em /usr/local/Trolltech/Qt-4.8.5/lib/
. Eu então escrevo o seguinte no meu .pro
Arquivo:
QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/
Nota 1: Os caminhos relativos parecem não funcionar. Prefere caminhos absolutos.
Nota 2: quando você então make
, você pode ver que a opção a seguir é dada ao vinculador: -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/
Nota 3: Para ter certeza de que os links binários dinamicamente à biblioteca correta, você pode exibir a versão do QT no tempo de execução entregue por qVersion()
.