Je voudrais inclure libQtGui.so.4 libQtNetwork.so.4 et libQtCore.so.4 dans le même répertoire que mon application. Comment pourrais-je faire comprendre cela à Qt? Un but est d'avoir une application autonome qui utilise des bibliothèques partagéesComment puis-je définir où une application Qt trouve un module Qt?
Répondre
Réglage de la variable d'environnement LD_LIBRARY_PATH est une option. Par exemple:
export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH
Une autre option consiste à définir le RPATH de votre application Qt lors de la liaison. Si vous définissez RPATH sur la valeur "$ ORIGIN", l'éditeur de liens dynamiques apparaîtra dans le même répertoire que votre application Qt au moment de l'exécution. Par exemple, si vous utilisez qmake, ajoutez l'extrait suivant à votre fichier de projet:
unix:!mac{
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs
QMAKE_RPATH=
}
Cela va régler le RPATH à "$ ORIGIN: $ ORIGIN/lib: $ ORIGIN/libs", ce qui signifie que l'éditeur de liens dynamique regardez d'abord l'emplacement de votre application Qt, puis dans un sous-répertoire lib à son emplacement, puis dans un sous-répertoire libs à son emplacement et enfin dans tous les emplacements définis par le système.
ne semble pas fonctionner. –
Voici la sortie de la compilation: "g ++: option non reconnue '-wl, - rpath = $ ORIGIN'" "g ++: option non reconnue '-wl, - rpath = $ ORIGIN/lib'" "g ++: option non reconnue '- wl, - rpath = $ ORIGIN/libs '" –
enlevé ceux manuellement dans le Makefile directement, pressé tout à nouveau construire puis il est passé ... maintenant pour l'essayer. –
UNIX/Linux va chercher dans LD_LIBRARY_PATH (si défini) avant de regarder dans les bibliothèques standard du système. Donc, si vous définissez cela, vous pouvez en effet remplacer. Tout comme la définition du PATH sur Windows. Même effet La commande compte.
Vous pouvez ajouter ./ ou. à LD_LIBRARY_PATH aussi.
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
J'ai essayé cela et ça ne marche pas. Je suis entré dans le projet et ai changé LD_LIBRARY_PATH à. mais rien n'a changé quand je suis retourné au terminal et ai tapé ldd ./MyApp ... Je construis de l'interface graphique ... devrais-je essayer de la ligne de commande? –
LD_LIBRARY_PATH
et n'a jamais travaillé pour moi. Au lieu de cela, j'ai mis QMAKE_RPATHDIR
dans mon fichier .pro
. Par exemple après avoir construit et installé (make install
) Qt, il a été placé dans /usr/local/Trolltech/Qt-4.8.5/lib/
. Je vous écris alors ce qui suit dans mon dossier .pro
:
QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/
Note 1: Les chemins relatifs semblent ne pas fonctionner. Préférez les chemins absolus.
Note 2: Lorsque vous alors make
, vous pouvez voir que l'option suivante est donnée à l'éditeur de liens: -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/
Note 3: Pour être sûr que les liens binaires dynamiquement à la bibliothèque correcte, vous pouvez afficher les version de Qt à l'exécution délivrée par qVersion()
.
Vous pouvez également décider de lier statiquement contre les bibliothèques Qt, de cette façon vous ne dépendez pas de la version Qt locale installée (c'est comme ça que Opera l'utilisait sous linux) – sisis
Problème avec la liaison statique sur la plate-forme Je suis le déploiement sur est que fontconfig est buggé (Red Hat 5.3 utilise fontconfig 2.4.1) –
quand j'essaye de construire statiquement il y a une référence indéfinie à FcTypeFreeQueryFace et quand j'essaye de mettre à jour fontconfig il me dit que fontconfig est à jour ... ..bummer..then je dois trouver un moyen de modifier les fichiers Qt pour construire avec une version de fontconfig que je fournis. Je suis capable de construire mon application dynamiquement avec un fontconfig que je fournis mais pas statiquement –