Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/11/2016, à 16:02

secalex

[Résolu] Question paramétrage GCC et cross-compilation

Bonjour à tous.

Je me permets de vous solliciter après deux semaines de recherches infructueuses.
Il y a probablement des chances que je sois un handicapé de la recherche.
Je ne suis pas non plus un linuxien permanent même si je connais quand même pas mal l'environnement.
Mon problème est le suivant.

Nous utilisons depuis un moment un PC portable sous Ubuntu 14.04 qui fonctionne parfaitement et où tout est bien paramétré.
On compile en C et on fait aussi de la cross-compilation pour une BeagleBone Black sans aucun problème.

Par souci de sécurité j'ai voulu réinstaller un autre PC avec Ubuntu.
Tout d'abord en virtual machine (V%ware workstation 12 player) avec Ubuntu 32bits (sur deux PC différents) mais aussi en dur sur mon portable avec un SSD externe en USB3 en version 64 bits car j'ai mis en cause le fait de tourner en virtual machine.
Dans les deux cas les dernières versions d'Ubuntu.

J'ai fait me semble-t-il pour installer convenablement GCC en récupérant tous les fichiers/packages utiles (binutils, GCC, GDB, glibc, gawk, m4, GMP, MPFR, MPC) avec installation correcte semble-t-il.

Puis j'ai installé tout le nécessaire pour ma BBB.
sudo apt-get install libc6-armel-cross libc6-dev-armel-cross
sudo apt-get install binutils-arm-linux-gnueabi
sudo apt-get install libncurses5-dev
sudo apt-get install gcc-arm-linux-gnueabi
sudo apt-get install g++-arm-linux-gnueabi

Pour avoir la même configuration que le PC portable où tout est ok.
Et là comme par hasard problème.
La génération fonctionne mais l'exécutable ne fonctionne pas sur la cible (segmentation fault).

Je me suis alors dit qu'il y avait un problème de paramétrage et j'ai commencé à regarder les différences.
Pour éviter tous problèmes liés aux IDE, je travaille en ligne de commande.

J'ai réussi à récupérer le fichier specs du PC portable et à le faire prendre en compte à la génération ce qui semble avoir fait progresser le schmilblick.

Ensuite quand je lance un gcc -v ou un arm-linux-gnueabi-gcc -v j'obtiens deux choses différentes.
Sur le portable où tout va bien :
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.1' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/5 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-gnu-unique-object --disable-libmudflap --disable-libitm --enable-plugin --with-system-zlib --enable-objc-gc --with-cloog --enable-cloog-backend=ppl --disable-cloog-version-check --disable-ppl-version-check --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv5t --with-float=soft --disable-werror --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include

Sur les autres machines :
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.1' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-armel-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-armel-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-armel-cross --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --enable-objc-gc --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv5t --with-float=soft --disable-werror --enable-multilib --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include

Mais je ne sais pas comment modifier cette partie malgré mes recherches.

Enfin, le fichier .map créé à la fin de la génération ne donne pas spécialement d'erreurs mais certaines lignes me laissent à penser qu'il doit y avoir un problème avec le linker :
.ARM.exidx      0x00010518        0x8
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
.ARM.exidx     0x00010518        0x8 /usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/lib/../lib/crt1.o
                [!provide]                PROVIDE (__exidx_end, .)

.preinit_array  0x00020f04        0x0
                [!provide]                PROVIDE (__preinit_array_start, .)
*(.preinit_array)
                [!provide]                PROVIDE (__preinit_array_end, .)

Merci d'avance pour votre aide.

Dernière modification par secalex (Le 29/11/2016, à 11:57)

Hors ligne

#2 Le 24/11/2016, à 18:42

derderder

Re : [Résolu] Question paramétrage GCC et cross-compilation

Les options données par gcc -v sont les options passées à la compilation de GCC, le seul moyen de les modifier est de compiler GCC depuis les sources. C'est étrange que ces options soit différentes d'ailleurs...
Est-tu sur d'utiliser la même commande pour compiler ?

Debugger de l'embarqué est toujours compliqué, est-ce que tu peux faire tourner gdb sur ton BeagleBone pour voir ou se produit la segfault exactement ?
Peut-tu également compiler un hello world avec le compilo qui fonctionne et un qui ne fonctionne pas, les désassembler et faire un diff pour voir ce qui est différent ?

Hors ligne

#3 Le 24/11/2016, à 21:08

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

Bonsoir,

Merci pour ta réponse.
Le truc c'est que ce n'est pas moi qui avait fait l'installation sur le PC portable donc pas de trace.
A la base la cible n'était pas la BBB mais une carte à base de CPU atom.
Vu que nous n'avons fait que porter les softs vers la BBB l'installation simple du compilateur arm-linux-gnueabi-gcc a dû rendre la transition transparente.

Je viens de refaire un ubuntu propre sur mon SSD et je vais tous réinstaller.

Faut-il mieux installer gcc en premier compiler les sources puis installer la partie arm ou installer la partie arm puis compiler gcc depuis les sources?

Je vais tenter d'installer gdb sur la BBB.

Pour le Helloword  je vais les compiler demain matin et je vais voir pour désassembler car je ne sais absolument pas comment faire.

Hors ligne

#4 Le 27/11/2016, à 10:26

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

J'ai voulu repartir sur du neuf et j'aurais dû m'abstenir.

J'en suis à vouloir recomplier glibc et il me dit que mes versions gcc, as, ld et make sont trop vielles bien que plus récentes que celles demandées dans son fichier install.
Il y a des moments linux me sort par les yeux. :-(

Hors ligne

#5 Le 27/11/2016, à 16:26

derderder

Re : [Résolu] Question paramétrage GCC et cross-compilation

Pourquoi veut-tu recompiler glibc ?
Il n'y a aucune raison de le faire.
Tu as désassemblé un hello world qui marche et un qui segfault pour voir les différences ?

Hors ligne

#6 Le 27/11/2016, à 18:42

Compte anonymisé

Re : [Résolu] Question paramétrage GCC et cross-compilation

Ton problème, c'est une segfault ? Qu'est-ce qui te fait dire qu'elle vient d'un paramétrage de GCC et pas d'une erreur de codage ?

#7 Le 27/11/2016, à 20:35

claudius01

Re : [Résolu] Question paramétrage GCC et cross-compilation

Bonsoir,

secalex a écrit :

... Il y a des moments [où] linux me sort par les yeux. :-(
... Pour le Helloword  je vais les compiler demain matin et je vais voir pour désassembler car je ne sais absolument pas comment faire.

Essais de faire de la cross-compilation avec les outils Windows, on en reparlera ;-)

Mais pourquoi donc desassembler alors que gcc permet comme tout compilateur de sortir le code ... assembleur ;-))
Cf. How do you get assembler output from C/C++ source in gcc ? avec l'option -S

Après, je ne dis pas que la comparaison entre le code généré qui fonctionne et celui qui coredump est aisée mais c'est effectivement un début de lever de doute impératif et en ce sens, je rejoins derderder...

Hors ligne

#8 Le 27/11/2016, à 21:20

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

@ derderder : la connerie ou l'envie d'essayer d'avoir bien suivi la procédure d'installation d'une toolchain.
J'ai pu désassembler le hello word du PC où tout marche bien.
Par contre, il a pas était compilé sur mon autre PC.
Déjà problème de librairie encore :

warning: GMP header version 6.1.1 differs from library version 6.1.0.
warning: MPFR header version 3.1.5 differs from library version 3.1.4.

Pour finir avec l'erreur suivante :

COLLECT_GCC_OPTIONS='-v' '-o' 'hello' '-march=armv5t' '-mfloat-abi=soft' '-mtls-dialect=gnu'
 /usr/lib/gcc/arm-linux-gnueabi/6.2.0/collect2 -plugin /usr/lib/gcc/arm-linux-gnueabi/6.2.0/liblto_plugin.so -plugin-opt=/usr/lib/gcc/arm-linux-gnueabi/6.2.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccalKd1c.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -dynamic-linker /lib/ld-linux.so.3 -X -m armelf_linux_eabi -o hello /usr/lib/gcc/arm-linux-gnueabi/6.2.0/../../../../arm-linux-gnueabi/lib/crt1.o /usr/lib/gcc/arm-linux-gnueabi/6.2.0/../../../../arm-linux-gnueabi/lib/crti.o /usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o -L/usr/lib/gcc/arm-linux-gnueabi/6.2.0 -L/usr/lib/gcc/arm-linux-gnueabi/6.2.0/../../../../arm-linux-gnueabi/lib /tmp/ccVnWOXY.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o /usr/lib/gcc/arm-linux-gnueabi/6.2.0/../../../../arm-linux-gnueabi/lib/crtn.o
/usr/lib/gcc/arm-linux-gnueabi/6.2.0/../../../../arm-linux-gnueabi/bin/ld: /usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o: Réadressages en format ELF générique (EM: 3)
/usr/lib/gcc/arm-linux-gnueabi/6.2.0/../../../../arm-linux-gnueabi/bin/ld: /usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o: Réadressages en format ELF générique (EM: 3)
/usr/lib/gcc/arm-linux-gnueabi/6.2.0/../../../../arm-linux-gnueabi/bin/ld: /usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o: Réadressages en format ELF générique (EM: 3)
/usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o : erreur lors de l'ajout de symboles : Fichier dans un mauvais format
collect2: erreur : ld a retourné 1 code d'état d'exécution

La sortie sur le PC ok donne :

COLLECT_GCC_OPTIONS='-v' '-o' 'hello' '-march=armv5t' '-mfloat-abi=soft' '-mtls-dialect=gnu'
 /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/collect2 --sysroot=/ --build-id --eh-frame-hdr -dynamic-linker /lib/ld-linux.so.3 -X --hash-style=gnu --as-needed -m armelf_linux_eabi -z relro -o hello /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/lib/../lib/crt1.o /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/lib/../lib/crti.o /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/crtbegin.o -L/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/lib/../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc-cross/arm-linux-gnueabi/4.7 -L/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/lib /tmp/ccc9Wpvu.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/crtend.o /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/lib/../lib/crtn.o

@ RatonPasLaveur : j'ai un PC où le code est généré sans problème.

@ claudius01 : je suis certain que ça doit être bien galère. :-)
Merci pour l'option et le lien.


Modération : merci à l'avenir d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 27/11/2016, à 21:31)

Hors ligne

#9 Le 27/11/2016, à 21:51

pingouinux

Re : [Résolu] Question paramétrage GCC et cross-compilation

Bonsoir,

secalex #8 a écrit :
/usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o : erreur lors de l'ajout de symboles : Fichier dans un mauvais format

Peux-tu donner le retour de

uname -a
file /usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o

sur le PC qui produit l'erreur

ainsi que

uname -a
file /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/crtbegin.o

sur celui qui est OK

Hors ligne

#10 Le 28/11/2016, à 09:27

derderder

Re : [Résolu] Question paramétrage GCC et cross-compilation

Désassembler permet également de voir le code inclus par crt0.o et companie.
Sinon tu as l'air d'avoir deux version de gcc différentes entre les deux PC, il se passe quoi si tu installe gcc 4.7 sur le PC qui ne marche pas ? En embarqué moins on change de compilo/version mieux on se porte !

Hors ligne

#11 Le 28/11/2016, à 09:45

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

@ Modération : désolé ;-)

@ pingouinux :

PC erreur

uname -a
Linux ubuntu 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:59 UTC 2016 i686 i686 i686 GNU/Linux

file /usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o
/usr/lib/gcc/arm-linux-gnueabi/6.2.0/crtbegin.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

PC ok

uname -a
Linux dev-laptop 3.13.0-95-generic #142-Ubuntu SMP Fri Aug 12 17:05:16 UTC 2016 i686 i686 i686 GNU/Linux

file /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/crtbegin.o
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/crtbegin.o: ELF 32-bit LSB  relocatable, ARM, EABI5 version 1 (SYSV), not stripped

@ derderder : déjà essayé et ça n'a rien changé ;-)

Dernière modification par secalex (Le 28/11/2016, à 09:45)

Hors ligne

#12 Le 28/11/2016, à 12:53

derderder

Re : [Résolu] Question paramétrage GCC et cross-compilation

Ton installation de gcc est incorrect, la commande file indique que crtbegin.o ( utilisé dans tous les programmes C ) est un executable 80386,  soit l'architecture i386 ce qui ne marche surement pas sur une carte arm,  je ne comprends mëme pas que ça puisse compiler !

Hors ligne

#13 Le 28/11/2016, à 13:43

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

C'est bien ce que je pensais.
On peut modifier ou il faut tout réinstaller?

Hors ligne

#14 Le 28/11/2016, à 15:27

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

J'ai scratché ma version vmware et je suis reparti sur du neuf en ne réinstallant que les parties pour la cross toolchain.

J'ai réussi à compiler et à désassembler mais j'ai des écarts entre les deux dumps.

Je ne sais pas si je dois mettre les deux fichiers de dump car ça fait du monde.

Dernière modification par secalex (Le 28/11/2016, à 15:29)

Hors ligne

#15 Le 28/11/2016, à 15:55

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

Le hello word a fonctionné.
Je teste la recompilation du soft.

Hors ligne

#16 Le 29/11/2016, à 09:37

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

J'ai recompilié le logiciel en ligne de commande et ça semble fonctionner.

Je repasse avec les IDE et je vous tiens au courant.

Hors ligne

#17 Le 29/11/2016, à 11:57

secalex

Re : [Résolu] Question paramétrage GCC et cross-compilation

C'est aussi OK avec l'IDE.

Merci pour tout et je passe le sujet en résolu.

Hors ligne