Bonjour, je suis étudiant en DUT Informatique, en première année. Je suis donc un débutant. J'ai commencé un travail en classe que j'ai à rendre. Je l'ai donc commencé sur Unix à l'aide du compilateur GCC. J'aimerais bien continuer chez moi sauf que j'utilise Windows avec MinGW. Ainsi en voulant compiler mon programme un message d'erreur apparait :
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
collect2.exe: erreur : ld a retourné 1 code d'état d'exécution
Et voici mes codes
bonjour.c:
#include <stdio.h>
#include"bonjour.h"
/*
* nom : affichBonjour
* finalité : afficher simplement bonjour
*/
void affichBonjour(void){
printf("Bonjour\n");
}
/*
* nom : affichBonjour1
* finalité : elle demande l'année en cours puis affiche bonjour pour cette année
*/
void affichBonjour1(void){
int a ;
printf("Année en cours: ");
scanf("%d",&a);
printf("Bonjour %d", a) ;
}
la VM, inclus par defaut dans w10 sous le nom HyperV
l'utilisation d'un IDE
je ne suis pas sur de celle-ci mais :
#include <stdio.h>
#include <windows.h> // il te manque ça je croix
int main ( void )
{
printf ( "hello\n" );
return ( 0 );
}
EDIT : tu peux donner ta ligne de compilation ainsi que le retour console complet ?
- Edité par ox223252 il y a environ 9 heures
Merci de m'avoir répondu !
Alors, j'ai essayé de mettre "#include <windows.h>" et ça n'a pas marché. ça m'affiche maintenant une autre erreur. Si les deux premières solutions peuvent m'aider, pourrais-tu s'il te plaît, me donner plus de détails sur ces dernières ?
Voilà la ligne de compilation et le retour console complet comme tu me l'as demandé :
C:\Users\Soso\AppData\Local\Temp\ccY0GqC6.o:testBonjour.c:(.text+0xc): undefined reference to `affichBonjour1'
collect2.exe: erreur : ld a retourné 1 code d'état d'exécution
EDIT : Désolé ! Je reviens pour dire que j'ai réussi à contourner le problème en compilant en même tant tous les fichiers de mon dossier en entrant dans le terminale : zcc *.c -o exo0
C'est déjà très bien. Je peux avancer dans mon travail et faire des essais.
Je ne peux pas donc pas compiler un fichier à la fois ?
Pour te dire si tu peux compiler un projet fichier par fichier, mais le faire à la main c'est long et fastidieux, c'est pour ça qu'on utilise make. En gros pour compiler tu dois compiler chaque élément séparément (gcc -c main.o main.c, gcc -c func.o func.c, …) puis faire les lien entre tout ça (gcc -o prog func.o main.o … ).
Pour simplifier le tout il y à makefile qui automatise tout ça regarde dans ma signature pour un tuto su les makefiles (après je n'ai jamais tenté les makefiles sous Windows).
EDIT : pour les autres solutions, avec ta VM tu va émuler un environnement (un linux par exemple) et là pas de problème de compatibilité et pour l'IDE, tu peux toujours installer code::blocks par exemple c'est lui qui va gérer toute la compilation, toi tu n'auras qu'a gérer les dépendances.
- Edité par ox223252 18 septembre 2018 à 7:58:05
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Quand tu a créé ton projet, il ne faut pas créer un win32 projet mais un "console projet" (c'est de la que doit venir ton erreur de winmain16)
Et tout marchera comme à ta fac, et inutile d'inclure <windows.h>
Le code que tu as mis est parfaitement portable, sous Windows et Linux, rien a changer
- Edité par Fvirtman il y a environ 12 heures
Salut !
Merci beaucoup d'avoir répondu ! J'ai réussi à "résoudre le problème". Enfaite, je pense que l'erreur venait de moi puisque pour compiler, je tapais dans le terminale : zcc NomDuFichier.c alors qu'il fallait mettre zcc *.c -o NomDuProg d'après ma prof. Effectivement, cela a marché. J'aurais aussi voulu savoir comment compiler les fichiers un par un sans que ça plante mais d'après
ox223252 c'est long et fastidieux. Je vais donc continuer à utiliser ce qui marche
ox223252 a écrit:
bonjour
Pour te dire si tu peux compiler un projet fichier par fichier, mais le faire à la main c'est long et fastidieux, c'est pour ça qu'on utilise make. En gros pour compiler tu dois compiler chaque élément séparément (gcc -c main.o main.c, gcc -c func.o func.c, …) puis faire les lien entre tout ça (gcc -o prog func.o main.o … ).
Pour simplifier le tout il y à makefile qui automatise tout ça regarde dans ma signature pour un tuto su les makefiles (après je n'ai jamais tenté les makefiles sous Windows).
EDIT : pour les autres solutions, avec ta VM tu va émuler un environnement (un linux par exemple) et là pas de problème de compatibilité et pour l'IDE, tu peux toujours installer code::blocks par exemple c'est lui qui va gérer toute la compilation, toi tu n'auras qu'a gérer les dépendances.
- Edité par ox223252 il y a environ 1 heure
Salut !
Ah oui, enfaîte je connaissais déjà la solution de la VM. Mais bon, moi ce que je voulais, c'était le fait de pouvoir compiler sous Windows. Mais c'est bon, je ne rencontre plus de problème, merci à toi en tout cas d'avoir consacré du temps à mon problème !
Pour compiler les fichiers un par un, pour zcc je ne sais pas, mais en général (et pour gcc) on met l'option -c
gcc -c entree.c
gcc -c plat.c
gcc -c dessert.c
ce qui produit des fichiers objets (suffixe .o)
Pour réunir ces fichiers et les lier à la bibliothèque standard, on fait
gcc entree.o plat.o dessert.o -o repas
ce qui fabrique l'exécutable désigné par l'option -o (output) qui, sinon, s'appelle a.out
On peut faire "gcc *.o -o repas" si on on est certain qu'il ne traine pas dans le répertoire un fichier .o qui ne devrait pas y être (suite à un renommage des sources, par exemple)
Ceci sans parler des autres options indispensables, comme -std=c11 -Wall -Wextra -pedantic etc.
- Edité par michelbillaud 18 septembre 2018 à 12:21:10
Si tu es sous Windows, installe Visual C++ (gratuit), tu n'as qu'à glisser tes fichiers .c dans la solution, ça compile tout tout seul, et tu as un débuggueur et un bel environnement, pas de makefile à taper.
Code blocks ou n'importe quel IDE pareil. Je trouve dommage de se passer d'IDE.
C'est dommage pour programmer, mais il y a une phase où il vaut mieux comprendre ce que l'IDE fait pour nous.
Cette semaine, j'ai un (*) étudiant de 2ieme année qui, après un an de java, c# et bash a tenté de faire exécuter un programme C en faisant
chmod 755 hello.c
./hello.c
parce qu'il n'a apparemment jamais compris qu'il fallait, d'une façon ou d'une autre, compiler les programmes sources.
Il y a donc un moment où faire les choses "à la main", c'est le moyen d'apprendre des choses qu'il est n'est pas inutile de savoir.
(*) Au moins.
- Edité par michelbillaud il y a environ 1 heure
Si seulement tous les profs savaient de quoi ils parlaient, mais certain sont aussi largué que les étudiants .
Mais il est vrai que beaucoup ne sont pas capable de comprendre comment fonctionne un makefile et encore pire il n'ont même pas conscience de son existence et utilité .
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Disons que la, l'auteur fait des makefile a la fac, mais si chez lui il veut tester ses programmes il peut prendre un IDE. Je suis tout a fait d'accord pour apprendre les makefile. C'est important.
Mais moi j'ai eu le problème inverse : je suis arrive dans le monde du travail sans connaître les IDE, ni les debuggueurs intégrés , ni meme pas mal de choses car tous mes profs nous faisaient faire du xemacs + makefile.... Dommage !
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html