Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/10/2017, à 00:14

GimliA

Référence indéfinie vers « main »

Bonsoir, j’essaie de faire un peu de C de mon coté pour préparé mes cours et j'ai un message d'erreur que je ne comprend pas. J'ai cherché un peu sur le site mais les quelques sujets que je trouvé ne m'ont pas aidé. Si vous pouvez faire quelque chose merci.

alban@alban-desktop:~/Documents/langC/MYLIB$ make
g++   mylib.o   -o mylib
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o : Dans la fonction « _start » :
(.text+0x20) : référence indéfinie vers « main »
collect2: error: ld returned 1 exit status
<commande interne> : la recette pour la cible « mylib » a échouée
make: *** [mylib] Erreur 1

Le makefile:

CC=g++
FLAGS=-Wall -Werror -g

all:	mylib

prog: 	mylib.o main.o
	$(CC) main.o mylib.o -o mylib

fonctions.o: mylib.c mylib.h
		$(CC) -c mylib.c $(FLAGS) -o mylib.o

main.o: 		main.c mylib.h
		$(CC) -c main.c $(FLAGS) -o main.o

clean:
rm -f *.o
rm -f mylib

Le main:

#include "mylib.h"
#include <stdlib.h>
#include <time.h>

int main(void) {
	TABint t;
	srand(time(NULL));

	randomInitTABint(t);
	displayTABint(t,TAILLE);

	return 0;
}

Le mylib.c:

#include "mylib.h"

/**
 * @brief	Fonction "randomInitTABint": initialise aléatoirement les
 * cases du tableau avec un nombre compris entre 0 et 99.
 * @param	tab, tableau à initialiser
 */
void randomInitTABint(TABint tab) {
	int i;
	for (i = 0; i < TAILLE; i++) {
		tab[i] = ((rand() % 100));
	}
}

/**
 * @brief	Fonction "minimum d'un tableau" -> À CODER
 * @param	t, tableau sur lequel travailler
 * @retval	min, valeur minimum rencontrée
 */
int minTABint(TABint tab) {
	int min,i;
	for(i=0;i<TAILLE;i++){
		if(i==0){
			min=tab[i];
		}
		if(tab[i]<min){
			min=tab[i];
		}
	}
	return min;
}

/**Fonction qui affiche un tableau**/
void displayTABint(TABint tab, int dim){
	int i;
	for(i=0;i<dim;i++){
		printf("%d ",tab[i]);
	}
	printf("\n");
}

et le mylib.h:

#include <stdio.h>
#include <stdlib.h>

#define TAILLE 10

typedef int TABint[TAILLE];

void randomInitTABint(TABint);
void displayTABint(TABint, int);

Hors ligne

#2 Le 23/10/2017, à 07:04

pingouinux

Re : Référence indéfinie vers « main »

Bonjour,
Dans le makefile, remplace

prog: 	mylib.o main.o

par

mylib: 	mylib.o main.o

Ajouté :
Pour bien faire, il faudrait aussi remplacer

fonctions.o: mylib.c mylib.h

par

mylib.o: mylib.c mylib.h

mais ici il se débrouille avec les règles de compilation implicites.

Dernière modification par pingouinux (Le 23/10/2017, à 07:20)

Hors ligne

#3 Le 23/10/2017, à 07:58

GimliA

Re : Référence indéfinie vers « main »

Mais oui, merci.

Hors ligne

#4 Le 23/10/2017, à 08:14

pingouinux

Re : Référence indéfinie vers « main »

Si c'est bon, pense à modifier ton premier message pour ajouter [Résolu] dans le titre.

Hors ligne