IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Déployer une application Qt sur Ubuntu par simple copie de fichiers

  1. #1
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 215
    Points : 226
    Points
    226
    Par défaut Déployer une application Qt sur Ubuntu par simple copie de fichiers
    Bonjour,
    j'ai développé une application C++/Qt qui tourne bien sous windows.
    Je l'ai ensuite compilée sous Ubuntu. Elle fonctionne très bien sur la machine Ubuntu 16.04 sur laquelle je l'ai développée.
    J'ai tenté de la déployer sur une autre machine ubuntu 16.04, mais là (contrairement à un déploiement sous Windows qui indique les dll manquantes) le logiciel se lance puisse coupe brutalement sans le moindre message.

    Quelqu'un sait il comment je pourrai déployer mon application sur un autre poste ubuntu? Je précise que le déploiement doit se faire par simple copie de fichier (pas de droits de super utilisateur ni de connexion internet sur les machines)

    Merci par avance pour votre aide j'avoue que je suis un peu perdu sur ce coup là, ubuntu et moi, on est pas très familiers.
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 874
    Points : 34 596
    Points
    34 596
    Par défaut
    Tu vas galérer un peu plus, car sous Windows, si les bibliothèques ne sont pas trouvées (.dll) dans c:\windows\system32, le chargeur va les chercher dans le dossier de l'exe. Sous Linux, c'est différent. Ce n'est pas automatique. Tu peux fixer le dossier ou rechercher les bibliothèque via la variable d’environnement $LD_LIBRARY_PATH.

    Et attention au 32/64 bits. Sous un Windows 64 bits, un code 32 bits s’exécutera sans sourciller. Sous Linux, pour qu'un code 32 bits s’exécute dans un système 64 bits, il faut que le paquet ia32-libs soit installé.

    Attends les réponses des spécialistes Qt, car il y a certainement quelque chose de tout fait dans Qt pour te faciliter la vie.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 215
    Points : 226
    Points
    226
    Par défaut
    merci chrtophe.

    Malheureusement j ai essayé avec la variable LD_LIBRARY_PATH, mais j'ai toujours pas avancé, cela ne change rien pour l instant.
    je tente de faire un .sh comme précisé dans la doc Qt mais je ne suis pas linuxien et je galère.
    Est ce que certains d'entre vous on des exemples?
    De plus sur windows je sais qu'il faut inclure les dll mais sur linux il n'y a pas de dll. Est ce que ce sont les .so?
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 874
    Points : 34 596
    Points
    34 596
    Par défaut
    oui, sous Linux les .so sont les bibliothèques partagées.

    Tu peux connaitre les dépendances d'un exécutable via la commande ldd
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 215
    Points : 226
    Points
    226
    Par défaut
    Oui chrtophe, je viens de voir ça. Merci.

    J'ai donc décidé de créer un dossier contenant mon programme et ses fichiers "release"
    Dans ce dossier je vais y ajouter un dossier "libs" dans lequel je vais y mettre tous les fichiers listés par ldd.
    ensuite je créé un fichier du nom de mon programme . sh (myapp.sh)
    dans ce myapp. sh j 'y mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/sh
    export LD_LIBRARY_PATH=`pwd`/libs
     
    ./myapp
    et je vous dirai demain si ça marche, je n'ai pas la machine qui pose problème avec moi :p
    A votre avis ça devrait aller?
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    26 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 26 004
    Points : 207 934
    Points
    207 934
    Billets dans le blog
    85
    Par défaut
    Bonjour,

    J'ai tenté de la déployer sur une autre machine ubuntu 16.04, mais là (contrairement à un déploiement sous Windows qui indique les dll manquantes) le logiciel se lance puisse coupe brutalement sans le moindre message.
    Il y a un message si vous lancez dans un terminal.

    Sinon, vous pouvez tenter une compilation de votre application, en statique. Ainsi elle embarquera les dépendances, mais c'est bien plus dur. Sinon, regardez comment les applications Viber ou Skype se débrouille. Cela revient à ce que dit chrtophe. Du coup, votre dernière solution, oui ça devrait aller.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 215
    Points : 226
    Points
    226
    Par défaut
    Alors la solution que je proposais hier soir n'a pas fonctionné.
    Mais grâce à LittleWhite, qui m'a dit de regarder comment font d'autres appli, je me suis dit regarde QtCreator.
    Et j'ai adopté le même principe et là ça marche.
    je vous explique:

    je récupère tous les fichiers de ma compilation release.
    Je les place dans un dossier "Install"
    ensuite j'y rajoute les dossiers suivants de Qt:
    le dossier Qt/5.5/gcc/lib
    le dossier Qt/5.5/gcc/plugins
    le dossier Qt/5.5/gcc/include
    le dossier Qt/5.5/gcc/qml

    ensuite j'ajoute le fichier monappli.sh dont voici le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #! /bin/sh
     
    makeAbsolute() {
        case $1 in
            /*)
                # already absolute, return it
                echo "$1"
                ;;
            *)
                # relative, prepend $2 made absolute
                echo `makeAbsolute "$2" "$PWD"`/"$1" | sed 's,/\.$,,'
                ;;
        esac
    }
     
    me=`which "$0"` # Search $PATH if necessary
    if test -L "$me"; then
        # Try readlink(1)
        readlink=`type readlink 2>/dev/null` || readlink=
        if test -n "$readlink"; then
            # We have readlink(1), so we can use it. Assuming GNU readlink (for -f).
            me=`readlink -nf "$me"`
        else
            # No readlink(1), so let's try ls -l
            me=`ls -l "$me" | sed 's/^.*-> //'`
            base=`dirname "$me"`
            me=`makeAbsolute "$me" "$base"`
        fi
    fi
     
    bindir=`dirname "$me"`
    libdir=`cd "$bindir/lib" ; pwd`
    LD_LIBRARY_PATH=$libdir:$libdir/qtcreator${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
    export LD_LIBRARY_PATH
    exec "$bindir/monappli" ${1+"$@"}
    ;

    ensuite je clique droit sur le fichier monappli.sh je vais dans propriété / permission / autoriser l'exécution comme un programme Appliquer et valider
    Il ne reste plus qu'à lancer l'application en double cliquant sur monappli.sh et en choisissant lancer ou lancer dans un terminal.

    Tout devrait maintenant fonctionner.
    Bon je reconnais que du coup je recupere pas mal de fichiers qui ne servent pas mais au moins tout fonctionne :-)

    Voilà je pense que l'on peut améliorer tout ça mais là on a le mérite d'avoir un fonctionnement quasi certain pour chaque appli.
    :-)
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD14] Déployer une application Windev sur MacOS
    Par tanora dans le forum WinDev
    Réponses: 2
    Dernier message: 19/08/2012, 12h58
  2. Déployer une application dataSnap sur un site web
    Par hinoatl_j dans le forum Web & réseau
    Réponses: 1
    Dernier message: 13/08/2012, 16h41
  3. Déployer une application .NET sur l'émulateur de Windows CE
    Par kachwahed dans le forum Visual Studio
    Réponses: 2
    Dernier message: 25/12/2009, 21h20
  4. Réponses: 1
    Dernier message: 14/05/2008, 16h31
  5. [Intraweb] Déployer une application intraweb sur IIS ?
    Par maxgar dans le forum Web & réseau
    Réponses: 9
    Dernier message: 21/07/2004, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo