Problème de compilation - C - Programmation
Marsh Posté le 11-05-2006 à 16:35:57
ReplyMarsh Posté le 11-05-2006 à 16:39:49
enfin tu sembles faire une cross-compilation donc je pense qu'il faut lier avec les bonnes libs (libc, libm pour arm) donc en indiquant le bon chemin.
Marsh Posté le 11-05-2006 à 16:45:16
non ce serait des probleme d'include plutot (le chien de mickey).
Quoi qu'il en soit, in vilo veritas ...
Marsh Posté le 11-05-2006 à 17:09:01
Oui oui c'est bien une cross-compil.
J'essaye donc de mettre les liens des libs pour arm.
J'ais étais un peu vite en disant "I/usr/lib/libm.a" en fait ça serait plutôt du "I/usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libm.a". Je voulais faire simple pour expliquer le PB.
En fait quand je fais une compilation normal et non croisé ma commande me donne aucune erreur et ça me créer un exécutable qui fonctionne très bien.
gcc -o xwsClient xwsclient.c soapC.c soapClient.c /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c -I/home/olivier/gsoap-2.7/soapcpp2/ |
Par contre dès que je passe à la commande avec le cross-compiler pour arm (càd /usr/local/
/gcc elf2flt) ca plante comme je l'ai dit précédemment.
Je ne sais donc pas quoi à la suite de cette commande, quel chemin, vers quel include ou quel lib.
Pour l'instant il y a que la libm.a qui me permet de réduire le nombre d'erreurs mais pour le reste je ne sais pas quoi mettre. C'est pas évident.
HELP ME lol
SomeBugsInMe a écrit : bah t'as essayé avec libc en ajoutant -lc ?? |
Non ca ne marche pas !
Marsh Posté le 11-05-2006 à 17:16:08
-I c'est include
et -l pour linker (si je ne m'abuse)
Marsh Posté le 11-05-2006 à 17:16:40
Peux-tu copier ici la ligne de commande complète que tu tapes (celle pour cross-compiler) ?
edit: en fait c'était effectivement pour voir les options utilisées car c'est -l (L minuscule) pour lier !
Marsh Posté le 11-05-2006 à 17:22:18
Voilà ce que je fais :
/usr/local/LxNETES-2.3/arm-elf/arm-elf/bin/gcc -elf2flt -o xwsClient xwsclient.c soapC.c soapClient.c /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c -I/home/olivier/gsoap-2.7/soapcpp2/
Avec ca ca m'enlève l'erreur sur isnan :
/usr/local/LxNETES-2.3/arm-elf/arm-elf/bin/gcc -elf2flt -o xwsClient xwsclient.c soapC.c soapClient.c /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c -I/home/olivier/gsoap-2.7/soapcpp2/ /usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libm.a
et je pense qu'il me faudrait une compil comme ca :
/usr/local/LxNETES-2.3/arm-elf/arm-elf/bin/gcc -elf2flt -o xwsClient xwsclient.c soapC.c soapClient.c /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c -I/home/olivier/gsoap-2.7/soapcpp2/ /usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libm.a + /usr/..................
Marsh Posté le 11-05-2006 à 17:23:37
_darkalt3_ a écrit : -I c'est include |
C'est possible oui. C'est même ce que je pensais.
Mais quand je met -I/..../lib/libm.a ca marche un peu puisque ca m'enlève une erreur. Enfin je crois.
Marsh Posté le 11-05-2006 à 18:13:20
essaie :
|
Note bien qu'il y a des -l (L minuscule) devant les 2 libs
Marsh Posté le 11-05-2006 à 20:48:45
Vilo5 a écrit : C'est possible oui. C'est même ce que je pensais. |
ca c'est impossible, -I... est directement passé à cpp, si tu lui passes un chemin invalide ca aura juste aucun effet
si tu veux lier avec un libm qui n'est pas dans /lib ou /usr/lib tu dois preciser son nom complet
Marsh Posté le 11-05-2006 à 23:51:27
ok ok
j'essaye ca demain matin a mon arrivé au boulot.
Mais je me demande si mon pb ne viens pas d'ailleurs, à savoir mes librairie gsoap dont je donne le chemin avec :
-I/home/olivier/gsoap-2.7/soapcpp2/
En fait quand je compile avec gcc normal en non croisé ca marche mais pas quand je fais la cross-compil.
Cela ne viendrait pas tout simplement du fait que mes libs de gsoap sont compatibles uniquement pour du x86. Il faudrait peut etre que je regarde si j'ai les sources de ces librairies et que je les compil seules avec le compilateur croisé et que ensuite je recompile mon application avec le compilateur croisé en spécifiant cette fois le chemin des librairie soap que j'ai précedement compilé pour du arm.
enfin je suis pas sure de ce que j'avance et ne sait pas non plus si c'est faisable.
Marsh Posté le 12-05-2006 à 09:13:33
SomeBugsInMe a écrit : essaie :
|
Bon alors j'ai essayé plusieurs choses.
en 1er ta solution :
mais apparement il n'aime pas les -l car il me renvoie une erreur : " cannot find -l/usr/..../libm.a "
Ensuite :
J'ai essayé de remplacer tes -l par des -L, -I, -i, mais ca ne fait rien, c'est comme si je ne le lui passer aucun lien de librairie il ne m'envoie pas d'erreur comme avec -l (cannot find), mais ne règle aucun de mais pb de compilation. En gros c'est la même chose qui si je fait ca :
/usr/local/LxNETES-2.3/arm-elf/arm-elf/bin/gcc -elf2flt -o xwsClient xwsclient.c soapC.c soapClient.c /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c -I/home/olivier/gsoap-2.7/soapcpp2/ |
pour finir le seul cas qui règle quelque chose c'est quand je fait ca :
/usr/local/LxNETES-2.3/arm-elf/arm-elf/bin/gcc -elf2flt -o xwsClient xwsclient.c soapC.c soapClient.c /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c -I/home/olivier/gsoap-2.7/soapcpp2/ /usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libm.a |
Donc c'est quand je rajoute a la suite du 1er -I (càd celui sur soapcpp2) le chemin d'une librairie sans spécifier de -quelque chose devant.
Comme je l'avais dit avant ce cas m'enlève l'erreur sur la fonction isnan.
Marsh Posté le 12-05-2006 à 10:41:34
Ne fais pas n'importe quoi non plus : -I sert à indiquer un chemin de recherche des en-têtes et -L sert à indiquer le chemin pour les libs. Si tu veux lier avec une bibliothèque, utilise -l
Peux-tu vérifier si les libs libm.a et libc.a se trouvent dans /usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/ ??
Marsh Posté le 12-05-2006 à 10:47:09
Citation : J'ai essayé de remplacer tes -l par des -L, -I, -i, mais ca ne fait rien |
c'te mélange
éventuellement, ne panique pas et lis la doc des options de compilation calmement, et vérifie tout point à point.
Marsh Posté le 12-05-2006 à 10:55:34
SomeBugsInMe a écrit : Ne fais pas n'importe quoi non plus : -I sert à indiquer un chemin de recherche des en-têtes et -L sert à indiquer le chemin pour les libs. Si tu veux lier avec une bibliothèque, utilise -l |
Oui, les libs libm.a et libc.a se trouvent bien dans /usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/ .
C'est bien pour ca que je comprend pas et test des trucs bizarres.
SomeBugsInMe a écrit : Ne fais pas n'importe quoi non plus : -I sert à indiquer un chemin de recherche des en-têtes et -L sert à indiquer le chemin pour les libs. Si tu veux lier avec une bibliothèque, utilise -l |
Bon alors je suis conscient que je test des trucs bizarre, j'ai déjà regardé un peu la doc.
Je sais que normalement :
-I c'est pour les includes, les entêtes
-L pour les librairies quand on indique le chemin complet
-l quand on fait juste -lm pour libm.a ou -lc pour libc.a
Mais c'est tout de même bizarre le sresultat que j'obtiens. Donc j'ai tester tout cà. de plus avec -l ca ne marche pas donc je comprend pas.
Marsh Posté le 12-05-2006 à 11:20:20
En fait, j'me suis planté : y'a pas besoin de -l si on indique les chemins des libs.
Donc :
|
devrait marcher.
Après je ne m'y connais pas en cross-compilation donc faudrait que tu cherches un tuto sur le web. Faudrait peut-être ajouter -nostdlib à la commande...
Marsh Posté le 12-05-2006 à 11:24:57
SomeBugsInMe a écrit : En fait, j'me suis planté : y'a pas besoin de -l si on indique les chemins des libs.
|
Oui ok pas besoin des -l si j'indique le chemin des libs.
-nostdlib je ne connaissais pas je vais essayer.
Bon en tout cas c'est sure ca doit être une histoire d ecross compil.
J'en ai déjà fait mais des plus simple.
Celle-ci est plus dure car je melle cross-compil avec compilation soap et fait appel a des libs soap qui ne sont pas prévu pour de l'arm.
GGrrrrr , je ne sais même pas si je cherche dans le bon sens.
Marsh Posté le 12-05-2006 à 11:34:22
Vilo5 a écrit : Oui ok pas besoin des -l si j'indique le chemin des libs. |
Lis le man où Google pour avoir la liste des options de GCC
Citation : des libs soap qui ne sont pas prévu pour de l'arm. |
Ah pas sûr que ça marche alors
Trouve-toi un howto pour te guider étape par étape.
Marsh Posté le 12-05-2006 à 11:38:50
SomeBugsInMe a écrit : Lis le man où Google pour avoir la liste des options de GCC |
ok
SomeBugsInMe a écrit :
|
J'aimerai bien mais pas évident.
J'ai une tres grosse doc avec gsoap, mais ca ne parle pas du tout de cross-compil.
Des docs sur la cross-compil ca se trouve.
Mais des doc sur de la cross-compil avec gsoap c'est introuvable et dans mon cas c'est ca qu'il me faudrait.
Si quelqu'un trouve ca, c'est un champion. Je serai trop heureux.
Marsh Posté le 12-05-2006 à 11:48:23
Peut-être en posant ta question dans un forum ou sur une mailing-list sur gsoap ou arm (si ça existe), tu auras des réponses ??
Marsh Posté le 12-05-2006 à 12:00:40
SomeBugsInMe a écrit : Peut-être en posant ta question dans un forum ou sur une mailing-list sur gsoap ou arm (si ça existe), tu auras des réponses ?? |
Merci c'est déjà fait ici : http://groups.yahoo.com/group/gsoap/
message :
http://groups.yahoo.com/group/gsoap/message/11612
et http://groups.yahoo.com/group/gsoap/message/11638
Mais pas de réponse.
PS: Vu mon super niveau en anglais c'est peut etre pas étonnant.
Marsh Posté le 12-05-2006 à 16:11:30
Pas d'autre idée ?
je n'avance pas, j'ai encore rien trouvé concret !
Marsh Posté le 11-05-2006 à 16:23:57
Bonjour j'ai un problème de compilation et je voudrais avoir votre avis :
Commande de compilation :
Résultat :
Bon passons les warnings et intéressons nous aux "undefined reference to". Apparement c'est des problèmes de link.
Mais je ne sais pas comment connaitre les lib des fonctions qui me pose problème. Je connais les fichiers .h qui correspondent a ces fonctions mais ne connait pas les lib .a.
gethostbyname_r --> netdb.h --> lib???.a
__ctype_get_mb_cur_max --> ???.h --> lib???.a
mbtowc --> stdlib.h --> lib???.a
wctomb --> stdlib.h --> lib???.a
strtod --> stdlib.h --> lib???.a
isnan --> math.h --> libm.a
Voilà donc j'ai juste la lib de isnan qui est libm.a et effectivement i je rajoute "/usr/lib/libm.a" à la fin de ma commande de dompilation je n'ai plus l'erreur sur isnan mais me reste encore les autres.
Est-ce que je cherche dans le bon sens en cherchant à rajouter des "-I/usr/lib..." pour spécifier les librairies.
Si oui quelqu'un connait t'il les libs qu'il faut que j'ajoute.
SI non que dois-je faire.
Merci d'avance.
Message édité par Vilo5 le 11-05-2006 à 16:28:00