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 :

Fichier binaire et bibliothèques statiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Par défaut Fichier binaire et bibliothèques statiques
    Bonjour,

    Je viens de terminer un projet utilisant les bibliothèques Qt4 et opencv2.
    Je compile sous ubuntu via Qt Creator en utilisant un .pro (ou bien avec un CMakeList). Tout s’exécute parfaitement.
    Je désire maintenant créer un exécutable qui puisse être lancé sur n'importe quelle autre machine où qt4 et opencv2 ne seraient pas installé.

    Ce problème doit être largement abordé mais je me retourne vers le forum après plusieurs tentatives infructueuses et des recherches goog caduque !

    Merci d'avance.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Il faut fournir les .so avec l'exécutable (tu auras la liste des .so utilisés par un binaire en utilisant la commande ldd). Attention au 32/64 bits. Tu peux fournir directement un fichier compressé qui sera décompressé par l'utilisateur, faire un paquet .deb ou encore faire un déploient automatique vers tes cibles si elles sont en réseaux et que tu as les droits administrateur (avec ssh). Pour le paquet .deb, il faut voir du côté du forum "Systèmes" -> "Linux", en particulier le tutoriel (il date de 2004, à vérifier que la méthode n'est pas changée). Si tu veux que l'application soit mise à jour automatiquement, tu peux aussi créer un dépôt local Ubuntu et l'ajouter dans synaptic.

  3. #3
    Membre régulier
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Par défaut
    Merci pour cette réponse.

    Je m'attaquerai à la création d'un paquet sûrement un peu plus tard, quand j'aurais plus de temps ! Je cherche une solution simple et rapide.
    Si j'ai bien compris :
    1) Je créer le fichier binaire via qtcreator
    2) Je place tous les '.so' nécessaire dans le dossier de l'exécutable
    3) Et c'est tout ?

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Oui


    PS : je viens de me rappeler une particularité des plugins image de Qt, il faut les mettre dans des répertoires spécifiques. Fais une recherche sur le forum

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par thereisnoknife Voir le message
    Je m'attaquerai à la création d'un paquet sûrement un peu plus tard, quand j'aurais plus de temps ! Je cherche une solution simple et rapide.
    Sous Linux, c'est la solution la plus simple et la plus rapide, pourtant : tous les binaires de ton programme sont dans le paquet, tu y spécifies toutes les dépendances de l'application... et c'est fini ! Le seul problème, c'est que ce n'est facile que quand on sait le faire ; il y a cependant généralement beaucoup de documentation pour les distributions à ce sujet (mais pas toujours compréhensible, il faut l'avouer).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Membre régulier
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Par défaut
    En effet, j'ai changé d'avis et j'essaye de créer un '.deb' !
    Voici où j'en suis :
    Tous mes '.cpp' et '.h' sont dans un dossier nommé <name_in_lowercase>-<version>.
    Je lance dh_make --createorig puis choisi l'option 'indep binary'.
    Mon '.deb' est créer et je peux l'installer sans problème.
    Cependant, je ne trouve nulle part l'exécutable ...

    Si vous aviez un exemple de création de package '.deb' à partir de codes source, ça me serait d'une grande utilité. Et c'est vrai, ça n'a pas l'air compliqué mais il faut l'avoir fait une fois :p

    Merci encore.

  7. #7
    Membre régulier
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Par défaut
    Je reviens vers vous !

    J'essaye encore une fois de créer un '.deb' afin d'installer un exécutable de mon projet ( gui qt4 avec dépendance à de multiples bibliothèques comme opencv .. etc .. ).

    Je recherche de la doc ou une marche à suivre pour arriver à mes fin.
    Voici l'output de la commande 'ldd' sur mon binaire.

    Merci encore pour votre aide.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    eric@eb:~/Dev/FaceAnnotator$ ldd faceannotator
    	linux-vdso.so.1 =>  (0x00007fff009ff000)
    	libopencv_core.so.2.3 => /usr/local/lib/libopencv_core.so.2.3 (0x00007f722fb52000)
    	libopencv_imgproc.so.2.3 => /usr/local/lib/libopencv_imgproc.so.2.3 (0x00007f722f6f3000)
    	libopencv_highgui.so.2.3 => /usr/local/lib/libopencv_highgui.so.2.3 (0x00007f722f4a5000)
    	libopencv_ml.so.2.3 => /usr/local/lib/libopencv_ml.so.2.3 (0x00007f722f230000)
    	libopencv_video.so.2.3 => /usr/local/lib/libopencv_video.so.2.3 (0x00007f722eff3000)
    	libopencv_features2d.so.2.3 => /usr/local/lib/libopencv_features2d.so.2.3 (0x00007f722ecf4000)
    	libopencv_calib3d.so.2.3 => /usr/local/lib/libopencv_calib3d.so.2.3 (0x00007f722ea40000)
    	libopencv_objdetect.so.2.3 => /usr/local/lib/libopencv_objdetect.so.2.3 (0x00007f722e7e3000)
    	libopencv_contrib.so.2.3 => /usr/local/lib/libopencv_contrib.so.2.3 (0x00007f722e5a0000)
    	libopencv_legacy.so.2.3 => /usr/local/lib/libopencv_legacy.so.2.3 (0x00007f722e2e8000)
    	libopencv_flann.so.2.3 => /usr/local/lib/libopencv_flann.so.2.3 (0x00007f722e0e0000)
    	libqglviewer-qt4.so.2 => /usr/lib/libqglviewer-qt4.so.2 (0x00007f722de43000)
    	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f722dc25000)
    	libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00007f722d9b6000)
    	libGL.so.1 => /usr/lib/mesa/libGL.so.1 (0x00007f722d738000)
    	libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0x00007f722d4f4000)
    	libQtOpenGL.so.4 => /usr/lib/libQtOpenGL.so.4 (0x00007f722d206000)
    	libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0x00007f722c564000)
    	libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0x00007f722c0d4000)
    	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f722bdce000)
    	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f722bb48000)
    	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f722b932000)
    	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f722b59e000)
    	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f722b399000)
    	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f722b191000)
    	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f722af79000)
    	libjpeg.so.62 => /usr/lib/x86_64-linux-gnu/libjpeg.so.62 (0x00007f722ad54000)
    	libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f722ab2d000)
    	libtiff.so.4 => /usr/lib/x86_64-linux-gnu/libtiff.so.4 (0x00007f722a8ca000)
    	libjasper.so.1 => /usr/lib/x86_64-linux-gnu/libjasper.so.1 (0x00007f722a672000)
    	libImath.so.6 => /usr/lib/libImath.so.6 (0x00007f722a46c000)
    	libIlmImf.so.6 => /usr/lib/libIlmImf.so.6 (0x00007f722a1ab000)
    	libIex.so.6 => /usr/lib/libIex.so.6 (0x00007f7229f8b000)
    	libHalf.so.6 => /usr/lib/libHalf.so.6 (0x00007f7229d48000)
    	libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0x00007f7229705000)
    	libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0x00007f7229451000)
    	libatk-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007f7229230000)
    	libgio-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007f7228f05000)
    	libpangoft2-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007f7228cd8000)
    	libpangocairo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007f7228acb000)
    	libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x00007f72288ab000)
    	libcairo.so.2 => /usr/lib/libcairo.so.2 (0x00007f72285e9000)
    	libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f722839f000)
    	libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f7228106000)
    	libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f7227ecf000)
    	libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f7227c7e000)
    	libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f7227a7a000)
    	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f7227874000)
    	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f7227585000)
    	libgstbase-0.10.so.0 => /usr/lib/libgstbase-0.10.so.0 (0x00007f7227346000)
    	libgstreamer-0.10.so.0 => /usr/lib/libgstreamer-0.10.so.0 (0x00007f7227062000)
    	libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f7226d0e000)
    	libgstapp-0.10.so.0 => /usr/lib/libgstapp-0.10.so.0 (0x00007f7226b02000)
    	libgstvideo-0.10.so.0 => /usr/lib/libgstvideo-0.10.so.0 (0x00007f72268f4000)
    	libavcodec.so.53 => /usr/local/lib/libavcodec.so.53 (0x00007f7225bb8000)
    	libavformat.so.53 => /usr/local/lib/libavformat.so.53 (0x00007f72258bc000)
    	libavutil.so.51 => /usr/local/lib/libavutil.so.51 (0x00007f722569c000)
    	libswscale.so.2 => /usr/local/lib/libswscale.so.2 (0x00007f7225460000)
    	libdc1394.so.22 => /usr/lib/libdc1394.so.22 (0x00007f72251ed000)
    	libv4l1.so.0 => /usr/lib/libv4l1.so.0 (0x00007f7224fe6000)
    	libbz2.so.1.0 => /lib/libbz2.so.1.0 (0x00007f7224dd6000)
    	/lib64/ld-linux-x86-64.so.2 (0x00007f722ff7d000)
    	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f7224a9b000)
    	libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f7224889000)
    	libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f7224685000)
    	libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f722447f000)
    	libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f7224279000)
    	libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f722406d000)
    	libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f7223e62000)
    	libaudio.so.2 => /usr/lib/libaudio.so.2 (0x00007f7223c48000)
    	libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007f7223a40000)
    	libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007f7223825000)
    	libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007f7223614000)
    	libIlmThread.so.6 => /usr/lib/libIlmThread.so.6 (0x00007f722340d000)
    	libXcomposite.so.1 => /usr/lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007f7223209000)
    	libXinerama.so.1 => /usr/lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007f7223006000)
    	libXrandr.so.2 => /usr/lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007f7222dfc000)
    	libXcursor.so.1 => /usr/lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007f7222bf2000)
    	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f72229b5000)
    	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f722279a000)
    	libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f722257c000)
    	libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x00007f722230d000)
    	libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007f722210a000)
    	libxcb-render.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007f7221f00000)
    	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f7221ce4000)
    	libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f7221ab9000)
    	libva.so.1 => /usr/lib/libva.so.1 (0x00007f722188f000)
    	libxvidcore.so.4 => /usr/lib/libxvidcore.so.4 (0x00007f7221580000)
    	libx264.so.115 => /usr/local/lib/libx264.so.115 (0x00007f7221278000)
    	libvorbisenc.so.2 => /usr/lib/libvorbisenc.so.2 (0x00007f7220da9000)
    	libvorbis.so.0 => /usr/lib/libvorbis.so.0 (0x00007f7220b7c000)
    	libtheoraenc.so.1 => /usr/lib/libtheoraenc.so.1 (0x00007f722093d000)
    	libtheoradec.so.1 => /usr/lib/libtheoradec.so.1 (0x00007f7220723000)
    	libopencore-amrwb.so.0 => /usr/lib/libopencore-amrwb.so.0 (0x00007f7220506000)
    	libopencore-amrnb.so.0 => /usr/lib/libopencore-amrnb.so.0 (0x00007f72202cc000)
    	libmp3lame.so.0 => /usr/lib/libmp3lame.so.0 (0x00007f7220052000)
    	libfaac.so.0 => /usr/lib/libfaac.so.0 (0x00007f721fe3f000)
    	libraw1394.so.11 => /usr/lib/libraw1394.so.11 (0x00007f721fc30000)
    	libusb-1.0.so.0 => /lib/libusb-1.0.so.0 (0x00007f721fa21000)
    	libv4l2.so.0 => /usr/lib/libv4l2.so.0 (0x00007f721f816000)
    	libXt.so.6 => /usr/lib/x86_64-linux-gnu/libXt.so.6 (0x00007f721f5af000)
    	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f721f3ac000)
    	libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f721f1a7000)
    	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f721efa0000)
    	libogg.so.0 => /usr/lib/libogg.so.0 (0x00007f721ed99000)
    	libv4lconvert.so.0 => /usr/lib/libv4lconvert.so.0 (0x00007f721eb26000)

  8. #8
    Membre régulier
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Par défaut
    Avancement ...

    J'ai décidé d'utiliser CMake + CPack pour la compilation/packaging.

    Dans mon CMake, je créé une shared lib :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ADD_LIBRARY(faceannotator SHARED ${HWQ_Qt4_SRC} ${HWQ_SRC})
    TARGET_LINK_LIBRARIES(faceannotator ${HWQ_LIB} ${OpenCV_LIBS} ${Boost_LIBRARIES} )
    Puis je créé mon exécutable, relié à cette bibliothèque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ADD_EXECUTABLE(run Main.cpp )
    TARGET_LINK_LIBRARIES(run faceannotator )
    INSTALL(TARGETS run DESTINATION face-annotator)
    Pour le Packaging, un simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SET(CPACK_GENERATOR "DEB")
    SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Eric Benhaim")
    INCLUDE(CPack)
    Ensuite l'installation se passe sans problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ make pakage
    $ sudo dpkg -i FaceAnnotator-0.1.1-Linux.deb
    Mais ./usr/face-annotator/run me renvoit ...
    libfaceannotator.so: cannot open shared object file: No such file or directory

    D'autre part, pendant que j'y suis ... je travaille sur une machine linux architecture amd64 et je voudrais que des utilisateurs linux x86 puisse aussi installer mon programme !

    Help ! :p

    Merci encore.

    [Peut-être que cette discussion n'est plus très bien placée ici ? ]

Discussions similaires

  1. Bibliothèques statique et taille du binaire resultant
    Par TheDrev dans le forum Débuter
    Réponses: 8
    Dernier message: 25/08/2008, 10h01
  2. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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