Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1514 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème de compilation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de compilation

n°1364377
Vilo5
Posté le 11-05-2006 à 16:23:57  profilanswer
 

Bonjour j'ai un problème de compilation et je voudrais avoir votre avis :
 
Commande de compilation :

Code :
  1. /usr/local/LxNETES-2.3/arm-elf/arm-elf/bin/gcc -elf2flt -o xwsClient xwsclient.c soapC.c soapClient.c
  2. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c -I/home/olivier/gsoap-2.7/soapcpp2/


Résultat :

Code :
  1. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c: In function `soap_code_bits':
  2. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c:1202: warning: comparison is always true due to limited range of data type
  3. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c: In function `soap_value':
  4. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c:10076: warning: comparison is always true due to limited range of data type
  5. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c: In function `soap_getmimehdr':
  6. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c:10563: warning: comparison is always true due to limited range of data type
  7. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c: In function `http_parse':
  8. /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.c:11942: warning: comparison is always true due to limited range of data type
  9. xwsClient.elf2flt: In function `tcp_gethost':
  10. xwsClient.elf2flt(.text+0x97d2c): undefined reference to `gethostbyname_r'
  11. xwsClient.elf2flt: In function `soap_string_out':
  12. xwsClient.elf2flt(.text+0xa2eb8): undefined reference to `__ctype_get_mb_cur_max'
  13. xwsClient.elf2flt(.text+0xa2ecc): undefined reference to `mbtowc'
  14. xwsClient.elf2flt: In function `soap_string_in':
  15. xwsClient.elf2flt(.text+0xa3784): undefined reference to `wctomb'
  16. xwsClient.elf2flt(.text+0xa3794): undefined reference to `__ctype_get_mb_cur_max'
  17. xwsClient.elf2flt: In function `soap_float2s':
  18. xwsClient.elf2flt(.text+0xa574c): undefined reference to `isnan'
  19. xwsClient.elf2flt: In function `soap_s2float':
  20. xwsClient.elf2flt(.text+0xa5a2c): undefined reference to `strtod'
  21. xwsClient.elf2flt: In function `soap_double2s':
  22. xwsClient.elf2flt(.text+0xa5fec): undefined reference to `isnan'
  23. xwsClient.elf2flt: In function `soap_s2double':
  24. xwsClient.elf2flt(.text+0xa62bc): undefined reference to `strtod'
  25. collect2: ld returned 1 exit status


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
mood
Publicité
Posté le 11-05-2006 à 16:23:57  profilanswer
 

n°1364394
SomeBugsIn​Me
life suxx
Posté le 11-05-2006 à 16:35:57  profilanswer
 

bah t'as essayé avec libc  en ajoutant  -lc ??

n°1364409
SomeBugsIn​Me
life suxx
Posté le 11-05-2006 à 16:39:49  profilanswer
 

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.


Message édité par SomeBugsInMe le 11-05-2006 à 16:40:01
n°1364420
_darkalt3_
Proctopathe
Posté le 11-05-2006 à 16:45:16  profilanswer
 

non ce serait des probleme d'include plutot (le chien de mickey).
 
Quoi qu'il en soit, in vilo veritas ...

n°1364452
Vilo5
Posté le 11-05-2006 à 17:09:01  profilanswer
 

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 !


Message édité par Vilo5 le 12-05-2006 à 09:14:10
n°1364465
_darkalt3_
Proctopathe
Posté le 11-05-2006 à 17:16:08  profilanswer
 

-I c'est include
et -l pour linker (si je ne m'abuse)

Message cité 1 fois
Message édité par _darkalt3_ le 11-05-2006 à 17:16:23
n°1364466
SomeBugsIn​Me
life suxx
Posté le 11-05-2006 à 17:16:40  profilanswer
 

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 !


Message édité par SomeBugsInMe le 11-05-2006 à 17:18:32
n°1364480
Vilo5
Posté le 11-05-2006 à 17:22:18  profilanswer
 

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/..................


Message édité par Vilo5 le 11-05-2006 à 17:24:44
n°1364481
Vilo5
Posté le 11-05-2006 à 17:23:37  profilanswer
 

_darkalt3_ a écrit :

-I c'est include
et -l pour linker (si je ne m'abuse)


 
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.

Message cité 1 fois
Message édité par Vilo5 le 11-05-2006 à 17:23:58
n°1364524
SomeBugsIn​Me
life suxx
Posté le 11-05-2006 à 18:13:20  profilanswer
 

essaie :
 


/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/ -l/usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libm.a -l/usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libc.a


 
Note bien qu'il y a des -l (L minuscule) devant les 2 libs

mood
Publicité
Posté le 11-05-2006 à 18:13:20  profilanswer
 

n°1364636
skelter
Posté le 11-05-2006 à 20:48:45  profilanswer
 

Vilo5 a écrit :

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.


 
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

n°1364727
Vilo5
Posté le 11-05-2006 à 23:51:27  profilanswer
 

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.

n°1364768
Vilo5
Posté le 12-05-2006 à 09:13:33  profilanswer
 

SomeBugsInMe a écrit :

essaie :
 


/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/ -l/usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libm.a -l/usr/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libc.a


 
Note bien qu'il y a des -l (L minuscule) devant les 2 libs


 
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.
 

n°1364856
SomeBugsIn​Me
life suxx
Posté le 12-05-2006 à 10:41:34  profilanswer
 

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/  ??

n°1364865
_darkalt3_
Proctopathe
Posté le 12-05-2006 à 10:47:09  profilanswer
 

Citation :

J'ai essayé de remplacer tes -l par des -L, -I, -i, mais ca ne fait rien


 
c'te mélange [:pingouino]
 
éventuellement, ne panique pas et lis la doc des options de compilation calmement, et vérifie tout point à point.

n°1364891
Vilo5
Posté le 12-05-2006 à 10:55:34  profilanswer
 

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
 
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/  ??


 
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
 
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/  ??


 
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.


Message édité par Vilo5 le 12-05-2006 à 10:56:12
n°1364937
SomeBugsIn​Me
life suxx
Posté le 12-05-2006 à 11:20:20  profilanswer
 

En fait, j'me suis planté : y'a pas besoin de -l si on indique les chemins des libs. [:petrus75]
Donc :
 


/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/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libc.a


 
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...

n°1364938
Vilo5
Posté le 12-05-2006 à 11:24:57  profilanswer
 

SomeBugsInMe a écrit :

En fait, j'me suis planté : y'a pas besoin de -l si on indique les chemins des libs. [:petrus75]
Donc :
 


/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/local/LxNETES/arm-elf/uClibc-0.9.19/lib/libc.a


 
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...


 
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  :pt1cable: , je ne sais même pas si je cherche dans le bon sens.

Message cité 1 fois
Message édité par Vilo5 le 12-05-2006 à 11:25:51
n°1364952
SomeBugsIn​Me
life suxx
Posté le 12-05-2006 à 11:34:22  profilanswer
 

Vilo5 a écrit :

Oui ok pas besoin des -l si j'indique le chemin des libs.
 
-nostdlib je ne connaissais pas je vais essayer.


 
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  [:pingouino]
 
Trouve-toi un howto pour te guider étape par étape.

Message cité 1 fois
Message édité par SomeBugsInMe le 12-05-2006 à 11:34:51
n°1364955
Vilo5
Posté le 12-05-2006 à 11:38:50  profilanswer
 

SomeBugsInMe a écrit :

Lis le man où Google pour avoir la liste des options de GCC


ok

SomeBugsInMe a écrit :


Citation :

des libs soap qui ne sont pas prévu pour de l'arm.


 
Ah pas sûr que ça marche alors  [:pingouino]
 
Trouve-toi un howto pour te guider étape par étape.


 
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.


Message édité par Vilo5 le 12-05-2006 à 11:43:59
n°1364966
SomeBugsIn​Me
life suxx
Posté le 12-05-2006 à 11:48:23  profilanswer
 

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 ??
 :hello:

n°1364982
Vilo5
Posté le 12-05-2006 à 12:00:40  profilanswer
 

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 ??
 :hello:


 
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.


Message édité par Vilo5 le 12-05-2006 à 12:02:40
n°1365278
Vilo5
Posté le 12-05-2006 à 16:11:30  profilanswer
 

Pas d'autre idée ?
 
je n'avance pas, j'ai encore rien trouvé concret !

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème de compilation

 

Sujets relatifs
Problème de compilation de JonasProbleme de compilation erreur, aider moi svp
Problème de compilation d'une JSPProblème lors de la compilation
problème de compilation avec eclipse[Rayzolu] Problème de linkage à la compilation
probleme compilation Qtproblème à la compilation MFC
Problème compilation dev-c++problème de liens à la compilation wxWidgets
Plus de sujets relatifs à : Problème de compilation


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)