Partage
  • Partager sur Facebook
  • Partager sur Twitter

error: ld returned 1 exit status

    24 avril 2019 à 17:45:18

    Bonjour,

    Dans le cadre d'un projet sur allegro en c j'ai dû faire un jeu. J'ai décidé de  séparer mon code en 1 fichier main, 1 fichier sous-programme.c et 1 fichier sous-programme.c. Lorsque je compile avec tout mon code dans un seul fichier le jeu se lance normalement. Mais lorsque je compile avec mon code dans plusieurs fichiers j'ai uniquement l'erreur suivante: error: ld returned 1 exit status. Je ne sais pas à quoi elle est due, j'espère que vous pourrez m'aider, merci d'avance.

    sous-programme.h

    #ifndef SOUS_PROGRAMME_H_INCLUDED
    #define SOUS_PROGRAMME_H_INCLUDED
    
    #define NIMAGE 5 //image de flappy
    #define NENNEMI 5 //image des ennmies immobiles
    #define NPAREIL 3 //nbre d ennemei immobiles pareils qui vont apparaitre
    
    #define NSEQ 3 // image des ennemis mobiles
    #define NPERSO 3 //nombre d ennemi mobile
    #define NMISSILES 20 //image de missiles
    
    ///STRUCTURES
    
    typedef struct graphismes
    {
        BITMAP*buffer;
        BITMAP*fond[3]; //décor des 3 niveaux
        BITMAP*menu; //pas utiliser encore
    
        BITMAP*image_flappy[NIMAGE]; //images du flappy
        BITMAP*image_ennemi[NENNEMI];
        BITMAP*missiles_f;
    
    }t_graphismes;
    
    
    typedef struct personnage
    {
        int x, y; //position
        int dx, dy; //deplacement & vitesse
        int tx, ty; //taille
        int tmpdx; //(new02/04) ralentir déplacements en x (1 pour ne pas ralentir)
        int cptdx;// compteur pour ralentir déplacement
        //BITMAP*personnage[N];
    
        int imgcourante; // indice de l'image courante
        int tmpimg;      // ralentir séquence (image suivante 1 fois sur tmpimg)
        int cptimg;      // compteur pour ralentir séquence
    
        ///NON UTILISE
        int type; //numéro de l ennemi ( ici : 0 Dragon  1 Poisson  2 Crabe  3 Abeille  4 Moustique  5 Serpent )
        int vie; //de 1 a 3
        int vivant; //O ou 1
        int tirs; //extension
    
    }t_personnage;
    
    typedef struct missile
    {
        int x,y; //position
        int dx; //deplacement
        int tx,ty;
        int booleen;
    
        int type; //missile flappy et ennemi
    }t_missile;
    
    typedef struct sequence
    {
        char *nomSource; // nom du fichier image contenant la séquence
        int nimg;        // nombre d'images dans la séquence
        int tx,ty;       // largeur et hauteur des images de la séquence
        int ncol;        // nbr images cotes à cotes horizontalement dans le fichier image
        BITMAP **img;    // tableau de pointeurs pour indiquer les images
    
    }t_sequence;
    
    t_sequence tabSequences[NSEQ] =
    {
            //      nomSource                , nimg,  tx,  ty, ncol
            {  "chauve_souris.bmp"         ,    1, 60,   82,    1},
            {  "ennemiViolet.bmp"          ,    1, 50,   45,    1},
            {  "ennemiRouge.bmp"           ,    1, 50,   49,    1},
    };
    
    void charger_bitmaps(t_graphismes *gfn, t_personnage *mesActeurs[NPERSO]);
    void deplacement_fond (t_graphismes*gfn, int *screenx, int *screeny);
    
    void creation_flappy (t_personnage *flappy);
    void deplacement_flappy(t_graphismes*gfn, t_personnage*flappy);
    
    t_personnage *creerActeur(int type, int x, int y, int dx, int tmpdx, int tmpimg);
    void remplirTabActeurs(t_personnage * tab[NPERSO]);
    void actualiserActeur(t_personnage *acteur, int screenx, int screeny);
    void actualiserTabActeurs(t_personnage * tab[NPERSO],int screenx, int screeny);
    void dessinerActeur(t_graphismes*gfn, t_personnage *acteur, int screenx);
    void dessinerTabActeurs(t_graphismes*gfn,t_personnage * tab[NPERSO], int screenx);
    void chargerSequence(t_sequence * seq);
    void chargerTabSequences();
    
    void creation_ennemi(t_personnage ennemi[NPAREIL][NENNEMI]);
    void affichage_ennemi(t_graphismes*gfn, t_personnage ennemi[NPAREIL][NENNEMI]);
    void deplacement_ennemi(t_graphismes*gfn, t_personnage ennemi[NPAREIL][NENNEMI],int screenx);
    
    void creation_missileF (t_graphismes*gfn, t_personnage *flappy, t_missile *missiles_flappy[NMISSILES]);
    t_missile *actualiser_MissilesF(t_missile *M);
    void tirs (t_missile *missiles_flappy[NMISSILES], t_personnage *flappy);
    void affichage_missileF (t_graphismes*gfn, t_missile *missiles_flappy[NMISSILES], t_personnage *flappy);
    
    char pointDansRectangle(int px, int py, int x1, int y1, int x2, int y2);
    void collision(t_graphismes*gfn, t_personnage flappy,t_personnage ennemi[NPAREIL][NENNEMI], t_personnage * tab[NPERSO],int screenx,int action);
    
    int menu_jeu();
    void barre_de_vie(t_personnage flappy,t_graphismes*gfn);
    
    #endif // SOUS_PROGRAMME_H_INCLUDED

    sous-programme.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <allegro.h>
    #include <time.h>
    
    #include "sous_programme.h"
    
    
    #define NIMAGE 5 //image de flappy
    #define NENNEMI 5 //image des ennmies immobiles
    #define NPAREIL 3 //nbre d ennemei immobiles pareils qui vont apparaitre
    
    #define NSEQ 3 // image des ennemis mobiles
    #define NPERSO 3 //nombre d ennemi mobile
    #define NMISSILES 20 //image de missiles
    
    
    ///SOUS - PROGRAMMES
    
    
    /* Nom : charger_bitmaps
    Role : charger toutes les bitmap
    Entree : gfn
    Sortie : gfn
    Auteur : Flora CARIDI
    Dernière modification : 08/04/2019
    */
    void charger_bitmaps(t_graphismes *gfn, t_personnage *mesActeurs[NPERSO])
    {
        int i;
        char nomfichier[100];
        char nomfichierE[100];
    
        //Création du buffer d'affichage
        gfn->buffer = create_bitmap(SCREEN_W, SCREEN_H);
        clear_bitmap(gfn->buffer);
    
        //Chargement des images de fond
        gfn->fond[0] = load_bitmap("jour.bmp",NULL);
        //gfn->fond[1] = load_bitmap("soir.bmp",NULL); mettre une boucle for
        //gfn->fond[2] = load_bitmap("nuit.bmp",NULL);
        if(!gfn->fond[0]){// || !gfn->fond[1] || !gfn->fond[2]){
            allegro_message("probleme mode graphique : fond");
            allegro_exit();
            exit(EXIT_FAILURE);
        }
    ...
     .... suite des sous-programmes

    main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <allegro.h>
    #include <time.h>
    
    #include "sous_programme.h"///inclusion des prototypes des sous-programmes
    
    
    #define NIMAGE 5 //image de flappy
    #define NENNEMI 5 //image des ennmies immobiles
    #define NPAREIL 3 //nbre d ennemei immobiles pareils qui vont apparaitre
    
    #define NSEQ 3 // image des ennemis mobiles
    #define NPERSO 3 //nombre d ennemi mobile
    #define NMISSILES 20 //image de missiles
    
    ///MAIN
    int main()
    {
        allegro_init();
        install_keyboard();
        install_mouse();
        set_color_depth(desktop_color_depth());//on fixe le mode couleur
    
        if (set_gfx_mode(GFX_AUTODETECT_WINDOWED,1024,700,0,0)!=0)
        {
            allegro_message("probleme gfx mode : screen");
            allegro_exit();
            exit(EXIT_FAILURE);
        }
    
        ///Declaration
        t_personnage flappy;
        t_personnage *mesActeurs[NPERSO];
        t_missile *missiles_flappy[NMISSILES];
        t_personnage ennemi[NPAREIL][NENNEMI];
    
        t_graphismes *gfn; //remplacer toutes les declarations de BITMAP*
        gfn =(t_graphismes*)malloc(sizeof(t_graphismes));
        charger_bitmaps(gfn, mesActeurs);
    
        //int niveau; //0, 1, 2 : jour, soir, nuit        utile pour fond[niveau]
    
        ///Initialisation
        int action=0;
        int nbvie=3;
            //FOND DEFILANT
        int screenx = 0;
        int screeny = 0;
        int OLD = 0;
    
        creation_flappy(&flappy);
        creation_ennemi(ennemi);//ENNEMI IMMOBILE
        creation_missileF(gfn, &flappy, missiles_flappy);
    
        /// BOUCLE DE JEU
        while(!key[KEY_ESC])
        {
            clear_bitmap(gfn->buffer);
    
            ///Affichage du fond qui defile
            deplacement_fond(gfn, &screenx, &screeny);
    
            ///Flappy
            deplacement_flappy(gfn, &flappy);
    
            ///Ennemi
            //Mobile
            actualiserTabActeurs(mesActeurs, screenx, screeny);//determiner nouvelle position
            dessinerTabActeurs(gfn, mesActeurs, screenx);//affichage nex position sur buffer
            //Immobile
            deplacement_ennemi(gfn, ennemi, screenx);
            affichage_ennemi(gfn, ennemi);
    
            ///Missiles
            //Flappy
            if((key[KEY_SPACE])&&(OLD==0)){
                tirs(missiles_flappy, &flappy);
            }
    
            int i;
            for (i=0;i<NMISSILES;i++){
                if(missiles_flappy[i]->booleen){//si le missile est actif
                    missiles_flappy[i] = actualiser_MissilesF(missiles_flappy[i]);
                }
            }
    
            affichage_missileF(gfn, missiles_flappy,&flappy);
    
            //Ennemis (missiles) -> A completer
    
            collision(gfn, flappy, ennemi, mesActeurs,screenx,action);
            if (action==1)
            {
                flappy.vie=flappy.vie--;
            }
            barre_de_vie(flappy,gfn);
            ///Affichage du contenu du buffer dans l’écran
            blit(gfn->buffer, screen , 0, 0, 0, 0, SCREEN_W, SCREEN_H);
            OLD = key[KEY_SPACE];
            rest(20);
        }
        return 0;
    }END_OF_MAIN()
    





    • Partager sur Facebook
    • Partager sur Twitter

    error: ld returned 1 exit status

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown