[C]Problème avec la compilation gcc

Fermé
6ril - 7 juin 2010 à 15:00
 6ril - 8 juin 2010 à 10:56
Bonjour,

Je n'ai jamais fait de C et je dois intégrer un logiciel codé en C.
J'ai réussi à compiler les sources n'utilisant que des
#include <string.h>
#include <stdio.h>


Ensuite, je suis passé à ceux contenant des #include "mon_fichier.h"
Or à ce moment là, j'obtiens un message d'erreur:

$ gcc mon_fichier.c [mon_fichier.h mon_fichier2.h] -o ./mon_fichier
mon_fichier.c: In function `get_options':
mon_fichier.c:354: warning: return makes pointer from integer without a cast
Undefined symbols:
  "_free_combi", referenced from:
      _main in cczzCtBt.o
  "_print_message", referenced from:
      _print_message$non_lazy_ptr in cczzCtBt.o
  "_launch_combinhaplo", referenced from:
      _main in cczzCtBt.o
  "_get_check_number", referenced from:
      _get_options in cczzCtBt.o
  "_free_combinhaplo_args", referenced from:
      _alloc_init_options in cczzCtBt.o
      _get_options in cczzCtBt.o
      _get_options in cczzCtBt.o
      _get_options in cczzCtBt.o
      _check_options in cczzCtBt.o
      _main in cczzCtBt.o
  "_new_combi", referenced from:
      _main in cczzCtBt.o
  "_new_combinhaplo_args", referenced from:
      _main in cczzCtBt.o
ld: symbol(s) not found
collect2: ld returned 1 exit status


Remarque: Le nom du fichier .o fourni dans le message d'erreur change à chaque lancement de demande de compilation
Après recherche sur internet, les forums... j'ai cru comprendre que la 2ème partie du message d'erreur venait d'un problème de lien, ce qui semble vérifié par le fait que lorsque que je compile avec "gcc -c ...", tout ce passe bien.
J'ai même essayer "gcc -Xlinker ld...", et dans ce cas j'obitiens:
mon_fichier.c: In function `get_options':
mon_fichier.c:354: warning: return makes pointer from integer without a cast
ld: file not found: ld
collect2: ld returned 1 exit status

Or, si je vais dans /usr/bin, j'ai bien un fichier "ld"

J'utilisais la version gcc 4.0.0 (Mac OS X 10.4), puis suis passé à la version 4.0.1(Mac OS X 10.5) et j'ai même testé avec la version 4.2.1 (Mac OS X 10.6) mais toujours le même problème.

Pour terminer, le code source a pu être compiler sans problème sous Windows et Linux par la personne me passant ce code. J'ai d'ailleurs pu utiliser sans problème l'exécutable Windows avec un emulateur

Je vous suis d'avance très reconnaissant de votre aide car je suis complètement perdu et ceux qui ont essayé de m'aider dans mon entourage aussi ...

A voir également:

3 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 juin 2010 à 15:27
Salut.
la compilation se passe bien. Donc tes sources doivent être correctes.
Si j'ai bien compris tu est sous MAC.
Le message te dit qu'il n'arrive pas à trouver certaines fonctions.
Ce genre d'erreur indique qu'il manque un fichier.o ou une bibliothèques. En général les bibliothèques sont liées aux fichiers .h, et portent un nom similaire.
Il manque peut être un -lstdlib ou -libc...
La ligne de compilation me parait étrange. C'est la première fois que je fois des crochets. As tu essayé en enlevant les crochets et ce qu'ils contiennent ?
0
en fait les crochets c'était pour dire que j'avais essayé avec et sans cette partie et que les résultats était identiques
0
dubcek Messages postés 18719 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 mai 2024 5 615
7 juin 2010 à 16:10
hello
utiliser l'option
gcc -I rep
où rep est le répertoire contenant le fichier "mon_fichier.h"
les fichiers entre <> sont cherchés dans /usr/include
0
oui c'est pour ça que j'ai #include "mon_fichier.h", pour signifier que celui-ci se trouve au même endroit que mon_fichier.c
mais même en utilisant gcc -I... ça ne change rien
0
dubcek Messages postés 18719 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 mai 2024 5 615
7 juin 2010 à 17:04
il manque un .o ou une librairie contenant free_combi, print_message, launch_combinhaplo, etc ?
0
ben en fait, j'ai entré mes fichiers dans Xcode et la seule erreur qu'il me reste est:
mon_fichier.c: In function 'get_options':
mon_fichier.c:354: warning: return makes pointer from integer without a cast


Alors il ne doit pas y avoir un manque de librairie, juste une erreur dans la commande de compilation

Sinon, existe-t-il une différence entre les "EXIT_FAILURE" sous Mac et sous Linux?
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 juin 2010 à 08:15
dubeck redit ce que j'ai dit : manque un fichier objet.
pour t'en convaincre, où est défini free_combi par exemple ?
C'est la question qu'il faut se poser lorsque tu as une erreur du genre "undefined symbols"
0
ben ces fonctions sont définies dans mon_fichier.h, qui est bien présent et bien "include"
mais comme je l'ai dit, ce problème de lien se résout lorsque je passe par Xcode

Est-ce normal qu'un Warning empêche la compilation? Car en java, ce n'est pas le cas.
0