#1 Le 08/08/2013, à 15:27
- zodd
[cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
Bonjour,
Je viens de faire une petite application sous Qt sous Ubuntu 12.04 LTS 64bits.
Je souhaiterai utiliser cette application sur un autre ordinateur lui aussi sous Ubuntu 12.04 LTS mais 32bits.
J'ai copier le répertoire qui contient le fichier "exécutable" sur l'autre ordinateur, et sur cet ordinateur j'ai fait un sudo chmod a+x nomDuFichierExecutable pour le rendre exécutable.
Hors lorsque que je fais :
./nomDuFichierExecutable
j'ai le message suivant:
bash: ./nomDuFichierExecutable : fichier binaire impossible à lancer
je me demande si le soucis ne viendrai pas du fait que je compile le projet sur une machine 64 bits et que j'essaie de le lancer ensuite sur une machine 32bits...
j'ai tenté un ldd ./nomDuFichierExecutable
mais j'ai la réponse suivante:
n'est pas un exécutable dynamique
Est ce que vous auriez une idée ?
Pour l'instant je veux juste tester mon programme sur un autre PC pour voir si ça marche.. donc j'essaie juste de le déployer "à la main"..
Dans un second temps, lorsqu'il sera finit, il faudra que j'envisage peut être de faire un paquet .deb .. plutôt pour ma culture plus que par nécessité car je ne compte pas l'installer sur 50 ordinateurs non plus..
j'ai trouvé des tas choses à ce sujet (dont les deux liens suivants), mais tout cela me semble bien compliqué pour déployer un tout petit programme d'une seule fenêtre et qui utilise juste QSerialPort et QUdpSocket en plus de QtGui..
http://doc.ubuntu-fr.org/tutoriel/creer_un_paquet
http://www.shadoware.org/post/paquet-debian-et-qt
Merci d'avance.
Dernière modification par zodd (Le 09/08/2013, à 09:52)
Hors ligne
#2 Le 08/08/2013, à 17:54
- grim7reaper
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
Bonjour,
je me demande si le soucis ne viendrai pas du fait que je compile le projet sur une machine 64 bits et que j'essaie de le lancer ensuite sur une machine 32bits...
Très probablement (vu que tu as compilé sur un système 64-bit)
Mais pour en être sûr, lance la commande file dessus :
file ton_executable
Si ça te sort un truc du genre :
ELF 64-bit LSB executable, x86-64
alors oui, ton exécutable est 64-bit et ça ne se lancera pas sur un ordinateur avec un système 32-bit.
Hors ligne
#3 Le 08/08/2013, à 18:05
- zodd
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
Bonjour,
oui j'ai bien ce message en retour:
ELF 64-bit LSB executable, x86-64
y a t'il une solution pour compiler mon programme en 32bits? car ça serait embêtant de me retaper une installation complète d'Ubuntu et de Qt ainsi que de QSerialPort juste pour ça.. :s
Hors ligne
#4 Le 09/08/2013, à 02:42
- grim7reaper
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
y a t'il une solution pour compiler mon programme en 32bits?
Oui.
D’abord il va falloir que tu aies sur ton système la version 32-bit des bibliothèques que ton programme utilise (regarde du côté du ou des paquets appelés multilib et ia32-libs).
Ensuite, quand tu compiles avec gcc, il te suffit d’ajouter le flag -m32.
Dernière modification par grim7reaper (Le 09/08/2013, à 02:45)
Hors ligne
#5 Le 09/08/2013, à 09:28
- zodd
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
ok merci je vais voir ça. question bête, comment être sur qu'on a bien récupéré toutes les bibliothèques nécessaire? je débute totalement en compilation croisée.. du cou je ne sais pas du tout où aller indiquer où les chercher, etc..
comme j'étais ultra pressé, j'ai lancer une machine virtuel 32 bits pour compiler vite fait.. mais c'est clair que je préfèrerai éviter de contourner le problème et savoir comment faire de la compilation croisée (même si juste passer de 64 à 32, n'a certainement rien d'un exploit)..
Hors ligne
#6 Le 09/08/2013, à 19:35
- grim7reaper
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
ok merci je vais voir ça. question bête, comment être sur qu'on a bien récupéré toutes les bibliothèques nécessaire?
Si tu as tout ce qu’il faut, ça compilera sans souci.
S’il manque un truc, tu auras un mesage d’erreur de l’éditeur de liens qui te dira qu’il ne trouve pas tel ou tel truc.
je débute totalement en compilation croisée..
Pour le coup, c’est vraiment une compilation croisée très simple (même OS, presque la même architecture) donc il ne devrait pas y avoir de grosses complications
du cou je ne sais pas du tout où aller indiquer où les chercher, etc..
Si les bibliothèques sont bien installées, normalement l’éditeur de liens se débrouille tout seul comme un grand pour trouver ce dont il a besoin. Pas d’indication particulière à fournir (si ce n’est le flag gcc que j’ai indiqué précédemment).
Petit exemple rapide avec un petit programme qui utilise la SDL (histoire de faire un exemple avec une bibliothèque externe) :
$ gcc -o hello hello.c -lSDL
$ ldd hello
linux-vdso.so.1 (0x00007fffdd4f7000)
libSDL-1.2.so.0 => /usr/lib/libSDL-1.2.so.0 (0x00007f4e37406000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f4e37059000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f4e36d5b000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f4e36b57000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f4e3693b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4e3769e000)
$ gcc -m32 -o hello hello.c -lSDL
$ ldd hello
linux-gate.so.1 (0xf7761000)
libSDL-1.2.so.0 => /usr/lib32/libSDL-1.2.so.0 (0xf769d000)
libc.so.6 => /usr/lib32/libc.so.6 (0xf74ee000)
libm.so.6 => /usr/lib32/libm.so.6 (0xf74ab000)
libdl.so.2 => /usr/lib32/libdl.so.2 (0xf74a6000)
libpthread.so.0 => /usr/lib32/libpthread.so.0 (0xf748a000)
/lib/ld-linux.so.2 (0xf7762000)
Comme tu peux le voir, je n’ai rien indiqué de particulier et il va chercher les bibliothèques 32-bit tout seul.
Dernière modification par grim7reaper (Le 10/08/2013, à 04:06)
Hors ligne
#7 Le 09/08/2013, à 21:21
- zodd
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
ok, c'est déjà plus clair, merci pour tes exemples même si je me doutais que ce n'était pas un cas compliqué, j'imaginais ça plus complexe.... et c'est le même principe en cas de compilation de programme Qt?
(je ne suis pas sur mon ordi pour pouvoir faire des essais...:/ )
par contre c'est normal que ce soit deux fois la même commande de compilation dans ton exemple? (je suppose que le flag -m32 ne devrait pas être la sur la première)
Dernière modification par zodd (Le 09/08/2013, à 21:42)
Hors ligne
#8 Le 10/08/2013, à 04:07
- grim7reaper
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
et c'est le même principe en cas de compilation de programme Qt?
À priori oui.
Il suffit de s’arranger pour passer le bon flag à gcc (-m32), et après ça devrait le faire.
par contre c'est normal que ce soit deux fois la même commande de compilation dans ton exemple? (je suppose que le flag -m32 ne devrait pas être la sur la première)
Tout à fait, erreur de ma part que je vient de corriger
Hors ligne
#9 Le 12/08/2013, à 10:41
- zodd
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
En fait, le truc, c'est que dans mon répertoire,j'ai un fichier .pro, et un lot de .cpp et .h . donc en thérorie, je suppose qu'il faudrait d'abords que je fasse un qmake, puis ensuite un make..et donc je suppose modifier le makefile avec le flag m32 avant de faire le make je suppose...? l'idéal serait de pouvoir sélectionner cette option directement dans Qt creator..
Hors ligne
#10 Le 12/08/2013, à 11:38
- grim7reaper
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
je suppose qu'il faudrait d'abords que je fasse un qmake, puis ensuite un make..et donc je suppose modifier le makefile avec le flag m32 avant de faire le make je suppose...? l'idéal serait de pouvoir sélectionner cette option directement dans Qt creator..
Non, le Makefile étant un truc généré automatiquement par qmake, il vaut mieux éviter d’y toucher.
Tu peux modifier directement le .pro et ajouter :
QMAKE_CXXFLAGS += -m32
dedans.
À priori, c’est la bonne façon de faire.
Tu peux aussi regarder si dans QtCreator tu peux spécifier les options du compilateur, je n’ai jamais utilisé cet IDE mais en théorie ça peut se faire.
Dernière modification par grim7reaper (Le 12/08/2013, à 11:40)
Hors ligne
#11 Le 12/08/2013, à 11:50
- zodd
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
merci pour l'info^^ je vais essayer de modifier le .PRO ^^
Pour le faire dans Qt creator, c'est ce que je ne trouve pas, car là où je pensais pouvoir faire la sélection, c'est grisé..
Hors ligne
#12 Le 12/08/2013, à 21:04
- zodd
Re : [cross compilation] Déployer application Qt Ubuntu 64bits vers 32bits
Bon c'est un bon début mais je crois que je n'ai pas les bonnes bibliothèques Qt installées car ce sont quand même les lib 64 bits qui sont appelées.. à voir comment modifier ça maintenant...
Hors ligne