2009-06-08 11 views
0

Je suis nouveau à C et je ne peux pas compiler un programme que j'ai téléchargé. Le errorMessage ressemble à ceci:ne peut pas compiler le code c

********@*******:~/Desktop/GRAPPA20$ gcc all_sorting_reversals.c 
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: In function `_start': 
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main' 
/tmp/ccwl1p7v.o: In function `find_all_sorting_reversals': 
all_sorting_reversals.c:(.text+0x536): undefined reference to `clear_list' 
all_sorting_reversals.c:(.text+0x55c): undefined reference to `clear_list' 
all_sorting_reversals.c:(.text+0x5c5): undefined reference to `push' 
all_sorting_reversals.c:(.text+0x5fe): undefined reference to `clear_list' 
all_sorting_reversals.c:(.text+0x61f): undefined reference to `clear_list' 
all_sorting_reversals.c:(.text+0x71d): undefined reference to `push' 
all_sorting_reversals.c:(.text+0x767): undefined reference to `list_size' 
all_sorting_reversals.c:(.text+0x791): undefined reference to `list_size' 
all_sorting_reversals.c:(.text+0x7fe): undefined reference to `list_size' 
all_sorting_reversals.c:(.text+0x830): undefined reference to `list_get' 

Le code peut être vu dans: http://pastebin.com/d749ec13a

+3

Pouvez-vous poster votre code C? – NinethSense

+0

Bien sûr, j'ai édité mon premier post :) – n00ki3

Répondre

4

Ceci est une erreur de liaison. Cela se produit parce que l'éditeur de liens ne peut pas trouver l'implémentation de certaines fonctions. Dans ce cas, les fonctions ne semblent pas provenir d'une bibliothèque. Donc, la cause la plus probable est que vous ne compilez pas dans tous les fichiers source C requis.

Avez-vous vérifié pour voir si le programme a un fichier make?

EDIT: Il est facile de voir ceci à partir de votre code posté. Les fonctions manquantes (clear_list, push, etc.) ne sont simplement pas définies dans ce fichier.

-3

On dirait que vous devez transmettre tout déclarer.

En C, le compilateur lit tout de haut en bas, donc si vous appelez une méthode et que la méthode est définie plus bas dans votre code, vous devez le déclarer.

Par exemple, cela ne marchera pas:

int main() 
{ 
    doStuff(); 
    return 0; 
} 
void doStuff() 
{ 
    int foo = 3; 
} 

.. mais cette volonté:

void doStuff() 
{ 
    int foo = 3; 
} 
int main() 
{ 
    doStuff(); 
    return 0; 
} 

Une autre possibilité est que vous essayez de compiler le code C++ avec un compilateur C. Les listes sont généralement créées en tant que classes, donc si vous avez une déclération de classe dans votre code, c'est C++ :)

Encore une fois, vous devez poster le code (ou un lien vers celui-ci), cause de ces messages, nous ne pouvons pas vous donner une réponse définitive.

[EDIT] Nvm, ceci est clairement pas votre réponse après avoir vu le code source :)

+0

Vos deux extraits de code sont identiques ... – ChrisF

+0

Correction pour lui. Je suppose qu'il voulait changer l'ordre de main et doStuff dans son deuxième extrait – PaulJWilliams

+0

Je ne savais pas ce qui est la raison pour laquelle je l'ai laissé. – ChrisF

6

Il semble que all_sorting_reversals.c ne contient pas la méthode main() et s'attend à être lié à d'autres objets/bibliothèques fournissant les autres méthodes manquantes (list_get, list_size, etc.).

2

semble que vous ne compilez pas tous les fichiers nécessaires, vous ne compilez un seul fichier qui à son tour ne possède pas la fonction principale

0

On dirait que vous pourriez manquer quelques bibliothèques.

-2

Il semble que la définition de fonctions telles que "liste_effacer", "pousser", etc, ne peut pas être localisée. Recherchez les bibliothèques/objets/fichiers contenant ces définitions, puis vérifiez si elles sont correctement liées à votre application.

Questions connexes