“Projet d'ERREUR: Unknown module(s) dans QT: multimédia” lors de la construction de mon projet avec des produits frais statique Qt5.3.0
J'ai configuré et construit ma propre version de Qt pour gcc 64 bits sous linux, et avec une liaison statique.
Le processus va comme ceci (à partir du fichier README fournies avec qt):
- Téléchargement qt-partout-* archive source
- Extrait de qt dans un dossier "qtdir"
- Faire un nouveau répertoire "ombre" à côté "de qtdir" et aller dans
- Run "qtdir"/qtbase/configure -prefix "qtdir"/qtbase
- Run
- Attendre pour qt construire pour terminer. Prend étonnamment peu de temps.
- Construire mon projet avec les qmake
Quand j'ai utiliser qmake sur mon ancien projet, il se ferme avec le message
"Projet d'ERREUR: Unknown module(s) dans QT: multimédia multimediawidgets
Mon dossier de projet contient les éléments suivants:
QT += core gui xml network widgets multimedia multimediawidgets svg
Ma question est donc, quelle est la bonne façon de compiler qt de façon statique, tout en incluant tous les modules souhaités dans la construction?
Merci!
Le même problème se pose sous Windows. La solution doit diffèrent quelque peu, cependant. Voici un pointeur à la question correspondante.
OriginalL'auteur Lennart Rolland | 2014-06-18
Vous devez vous connecter pour publier un commentaire.
Il s'avère que la construction de l'intervalle qt de façon statique a été plus difficile que j'ai d'abord attendu (espéré?)
Dans cette réponse, je vais exposer mon parcours pour avoir enfin un travail complet statiquement lié à qt que de compiler correctement avec mon projet sur Qt5/64bit/Linux.
Tout d'abord une liste de conseils qui ont été déterminantes pour la réussite de mon stage:
Assurez-vous d'avoir la 3ème partie des dépendances que qt besoin installé. Le moyen le plus facile à organiser pour ce qui est d'installer les paquets de développement à l'aide de la gestion de paquets de votre distribution Linux. Le plus hardcore est de télécharger les sources et les compiler vous-même, assurez-vous d'inclure appropriés -L et-L options. Pour une liste complète des dépendances, regardez le guide officiel sur la façon de construire qt5 à partir de git. Il a des instructions sur exactement quels paquets sont nécessaires pour chaque module qt, et comment les installer pour plusieurs distributions. Pourquoi? Certains modules (tels que
qtmultimedia
) permettra de tester l'environnement de compilation disponibles dépendances, et permettra de s'adapter à cela. Si il vous manque quelques dépendances vous allez vous retrouver avec unqtmultimedia
module ne prend pas en charge la vidéo ou de l'audio ou les deux (manque d'impulsion/alsa/gstreamer dev libs).Il y a deux manières fondamentales pour construire l'intervalle qt. Vous pouvez construire qt "arbre" et "out-of-arbre". J'ai trouvé que le "out-of-arbre" approche laisse plus de travail sur vos épaules tout en fin de compte, il est le plus intuitif pour moi. J'ai procédé à cette approche dans cette réponse. "en arbre" signifie que vous comptez sur la déjà établi la structure de dossier trouvé dans votre répertoire source(lire: beaucoup de choses que vous ne pas saisir facilement). "l'arbre" signifie que vous créez un répertoire de construction et de commencer le processus de construction à partir de là. C'est aussi appelée "l'ombre "construire". La raison pour laquelle je trouve cela plus intuitive est que vous pouvez regarder dans le répertoire de l'ombre pour voir quels fichiers ont été réalisés, copié, modifié à chaque étape de la voie, et si les fichiers sont manquants, vous savez tout de suite que quelque chose est incorrect.
Certaines des options de configuration va avoir des effets indésirables. Par exemple, le
-fully-process
option, alors qu'il a promis de tout inclure, cassé mon build. Lire la sortie de./configure --help
attentivement et essayez de comprendre ce que chaque point.MODIFIER AJOUTÉ 2016-05-04: Qt construire effectivement produit un ensemble de fichiers journaux que vous pouvez consulter pour obtenir de bonnes informations sur le pourquoi modules sont manquants ou pourquoi les choses ne construit pas comme prévu. J'ai découvert cela en dépôt un peu le problème de tout bâtiment Qt 5.6.0 sous docker.
Vous aurez très probablement jusqu'à la fin avec une configuration qui s'appuie uniquement le
qtbase
module, et le reste des modules tels queqtmultimedia
etqtsvg
devront être construites après. Mais ne disparaissent pas, cela est en fait plus simple qu'il n'y paraît.L'ordre dans lequel vous décidez de construire les modules séparés questions. Certains modules ne sera pas construire si vous n'avez pas construit leurs dépendances. Par exemple
qtdeclarative
nécessiteqtscript
d'abord être construites.Je conseil vivement de documenter vos progrès lors de la construction de l'intervalle qt. Je l'ai fait en ne cessent de s'améliorer un script shell qui permettrait d'effectuer toutes les étapes qu'il a travaillé jusqu'à ce point. Je vais partager mon script dans ce post dans l'espoir qu'il sera utile comme un guide pour vous le plus rapidement possible.
Maintenant avec ceux des conseils généraux de la route, voici ma bash script pour télécharger une version de qt5, la configuration et la construction d'un goût:
EDIT: Cela a fonctionné sur Ubuntu 12.04 x64 mais quand j'ai reproduit le processus de Debian 7.0 x64 il a échoué avec un message d'erreur: sur le même format: "Projet d'ERREUR: Unknown module(s) dans QT: rapide svg multimediawidgets multimédia". Après un dépannage, j'ai trouvé que par l'exécution de la configurer et créer des étapes deux fois dans une rangée sans nettoyage résout ce problème. Pas une solution élégante, je sais, mais j'avais de l'espoir pour certains Qt5 fonctionnaires/les pros de soumettre une réponse à cela au lieu de moi, à essayer de comprendre les choses par essai et erreur. J'ai envoyé un rapport de bug pour qt à ce sujet ici: https://bugreports.qt.io/browse/QTBUG-39733
Pour utiliser ce script, le mettre dans un nouveau fichier texte comme
qt.sh
etchmod +x qt.sh
pour le rendre exécutable. Faire un vide dir et exécutez le script à partir de là.Après qu'il est terminé, le qmake sera sous
<your dir>/qt/build/<version>/qtbase/bin
. Vous devriez être capable de l'utiliser comme tout autre qmake, à partir de la ligne de commande, un script ou un QtCreator. Exemple:Si quelque chose va mal, vous pouvez maintenant ouvrir $fichier JOURNAL à l'aide de votre éditeur de texte favori et de regarder ce qui s'est passé.
Et enfin, pour vérifier que votre projet a été compilé avec qt lié statiquement, vous pouvez exécuter
ldd my_binary
et de voir que la liste liée de façon dynamique les bibliothèques contient aucune mention de l'intervalle qt ce que-si-jamais. De GAGNER!Je ne sais pas si c'est la meilleure façon de le faire, donc si vous connaissez un meilleur moyen, ou a des améliorations, n'hésitez pas à partager!
Depuis, j'ai mis à jour un peu moi-même. Vous pouvez voir ma version ici; pastebin.com/jb2hwDwH Il a été modulaire de sorte que vous n'avez pas à effectuer chaque étape pour chaque invocation (voir en bas)
OriginalL'auteur Lennart Rolland