01net    Web


Actuellement en ligne : 106 Utilisateurs dont 5 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> [dev-c++] undefined reference to
Passionné(e) d'internet, de logiciels, de forums ? 01net recrute...
Auteur
Message
 
<     1       >
LunaSev
  
   
      ?   @     Posté le 05/04/2007 19:44:27  
Voter pour ce message
Bonjour,
je débute en C, j'ai fait ma première fonction, et DEV-C++ refuse de compiler mon programme, que voici.

EX1.C
/* programme mettant à zéro la diagonale du milieu de la matrice */
#include <stdio.h>
#include "matrice.h"

main()
{
int **mat;
int ilig, icol, taille;
printf("Entrez la taille de la matrice : ");
scanf("%d", &taille);
decmatrice(mat, taille, taille);
initmatrice(mat, taille, taille);

for (ilig=0;ilig<taille;ilig++)
for (icol=0;icol<taille;icol++)
if (ilig==icol)
mat[ilig][icol] = 0;

affichmatrice(mat, taille, taille);
freematrice(mat, taille, taille);
}


matrice.c (certaines de ses fonctions ne servent pas dans le programme EX1, mais pour d'autres exercices. Ils ne gènent pas, si?):
/* Déclaration de la matrice */
int decmatrice(int **mat, int tlig, int tcol)
{
int ilig, icol;
mat = (int**)calloc(tlig, sizeof(int*));
for (ilig=0;ilig<tlig;ilig++)
mat[ilig] = (int*)calloc(tcol, sizeof(int));
return 0;
}
/* Initialisation de la matrice */
int initmatrice(int **mat, int tlig, int tcol)
{
int ilig, icol;
for (ilig=0;ilig<tlig;ilig++)
for (icol=0;icol<tcol;icol++)
{
printf("Entrez la valeur de la %dème ligne et de la %dème colonne :\n", ilig+1, icol+1);
scanf("%d", &mat[ilig][icol]);
}
return 0;
}
/* Affichage de la matrice */
int affichmatrice(int **mat, int tlig, int tcol)
{
int ilig, icol;
for (ilig=0;ilig<tlig;ilig++)
{
for (icol=0;icol<tcol;icol++)
printf("%d",mat[ilig][icol]);
printf("\n");
}
return 0;
}
/* Libération de la mémoire */
int freematrice(int **mat, int tlig, int tcol)
{
int ilig, icol;
for (ilig=0;ilig<tlig;ilig++)
free(mat[ilig]);
free(mat);
return 0;
}


matrice.h :
int decmatrice(int **mat, int tlig, int tcol);
int initmatrice(int **mat, int tlig, int tcol);
int affichmatrice(int **mat, int tlig, int tcol);
int freematrice(int **mat, int tlig, int tcol);



Quand je compile EX1.C, voici les erreurs que j'obtiens :

[Linker error] undefined reference to `decmatrice(int**, int, int)'
[Linker error] undefined reference to `initmatrice(int**, int, int)'
[Linker error] undefined reference to `affichmatrice(int**, int, int)'
[Linker error] undefined reference to `freematrice(int**, int, int)'

ld returned 1 exit status

j'ai lu quelque part qu'il fallait taper :
c -l(matrice)
dans "option du compilateur" -> ajouter ces commandes lors de l'éditeur de liens.
Dans ce cas, il compile (pas d'erreur), mais EX1.EXE n'est pas créé.
J'ai essayer de le mettre aussi dans "ajouter ces commandes lors de l'appel au compilateur", mais ça fait pareil.

Quelqu'un peut-il m'aider?
Merci

Minus-et-Cortex
  
   
      ?   @     Posté le 05/04/2007 22:30:07  
Voter pour ce message
Salut!

Sous Dev-C++, tu fais :
- Fichier -> Nouveau -> Projet
- tu sélectionnes Console Application et Projet C

Dev-C++ crée automatiquement un fichier main.c.
Dans le panneau de gauche qui liste les fichiers du projet, tu fais un clic droit sur le fichier main.c et Renommer le fichier. Tu le renommes ex1.c.
Ensuite, toujours dans le même panneau, tu cliques (clic droit) sur le nom de ton projet (par défaut c'est Projet1), puis Nouveau fichier source. Tu renommes ce fichier comme précédemment, avec le nom matrice.c. Enfin tu ajoutes un nouveau fichier source, que tu renommes matrice.h.
Dans chacun de ces trois fichier, tu copies/colles le code que tu as posté sur le forum et tu sauvegarde tout. Ensuite tu fais Exécuter -> Compiler & Exécuter (ou F9) et ton projet se compile et se lance. Le fichier .exe est bien créé ainsi que les deux fichiers matrice.o et ex1.o. Rien besoin de plus dans les options du projet.

@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
LunaSev
  
   
      ?   @     Posté le 05/04/2007 23:21:48  
Voter pour ce message
Merci pour ce mode opératoire complet!
Pourquoi faut-il faire cela?

Par contre, ça ne marche pas avec moi, j'obtiens ce message d'erreur lors de la compilation :
C:\Dev-Cpp\Makefile.win [Build Error] No rule to make target `all'. Stop.


Maintenant, j'ai une autre question : quand je crée matrice.c et matrice.h (et projet1 aussi) ils sont créés directement dans dev-cpp. Y a-t-il possiblité de les mettre dans des dossiers, histoires que je ne mélange pas mes fichiers avec les autres (ceux qui font fonctionner devcpp) ?
Mais peut-être que ça a un rapport avec mon erreur?

merci
Minus-et-Cortex
  
   
      ?   @     Posté le 05/04/2007 23:33:43  
Voter pour ce message
Il faut sauvegarder tous tes projets créés dans des répertoires séparés. Quand tu cliques sur OK après avoir choisi les options du projet (Console Application et Projet C) il faut sauvegarder le projet ailleurs que dans le répertoire proposé par défaut (qui est C:\Dev-Cpp). Tu sauvegardes le projet dans Mes Documents, dans un sous-répertoire destiné à recevoir tous les fichiers du projet et seulement eux. De même, quand tu fais sauvegarder tout (ou sauvegarder sous quand il s'agit d'un seul fichier) il faut faire la sauvegarde dans le même répertoire que celui du le projet.

@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
LunaSev
  
   
      ?   @     Posté le 06/04/2007 08:29:12  
Voter pour ce message
Ok, merci.

Mais les erreurs sont toujours là. Pas celle d'hier soir (je ne sais pas ce que j'avais fait!), mais les premières :
[Linker error] undefined reference to `decmatrice(int**, unsigned int, unsigned int)'
[Linker error] undefined reference to `initmatrice(int**, int, int)'
[Linker error] undefined reference to `affichmatrice(int**, int, int)'
[Linker error] undefined reference to `freematrice(int**, int, int)'
ld returned 1 exit status
D:\PROG C\TP5\Makefile.win [Build Error] [Projet1.exe] Error 1


je peux redonner le code, mais c'est le même que précédemment.

Merci de ton aide
Minus-et-Cortex
  
   
      ?   @     Posté le 06/04/2007 09:04:09  
Voter pour ce message
Salut!

Dans le répertoire de ton projet, tu devrais avoir au moins ces fichiers (dans mon cas, mon projet s'appelle Projet1) :
- Projet1.dev
- matrice.h
- matrice.c
- ex1.c
Le fichier Projet1.dev contient :
[Project]
FileName=Projet1.dev
Name=Projet1
UnitCount=3
Type=1
Ver=1
ObjFiles=
Includes=
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=
CppCompiler=
Linker=
IsCpp=0
Icon=
ExeOutput=
ObjectOutput=
OverrideOutput=0
OverrideOutputName=
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=

[Unit1]
FileName=ex1.c
CompileCpp=0
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

[Unit2]
FileName=matrice.c
CompileCpp=0
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

[Unit3]
FileName=matrice.h
CompileCpp=0
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0


Quand tu compiles le projet, Dev-Cpp produit un fichier nommé Makefile.win qui contient :
# Project: Projet1
# Makefile created by Dev-C++ 4.9.9.2

CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
RES =
OBJ = ex1.o matrice.o $(RES)
LINKOBJ = ex1.o matrice.o $(RES)
LIBS = -L"C:/Dev-Cpp/lib"
INCS = -I"C:/Dev-Cpp/include"
CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
BIN = Projet1.exe
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm -f

.PHONY: all all-before all-after clean clean-custom

all: all-before Projet1.exe all-after


clean: clean-custom
${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
$(CC) $(LINKOBJ) -o "Projet1.exe" $(LIBS)

ex1.o: ex1.c
$(CC) -c ex1.c -o ex1.o $(CFLAGS)

matrice.o: matrice.c
$(CC) -c matrice.c -o matrice.o $(CFLAGS)

L'application de la commande make sur ce fichier va créer les fichiers matrice.o (qui contient le code de decmatrice, initmatrice, affichematrice et freematrice), ex1.o et Projet1.exe.
Vérifie que tu as bien cela (change Projet1 par le nom de ton projet).

@+
-->Message édité par Minus-et-Cortex le 06/04/2007 09:06:32<--
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
LunaSev
  
   
      ?   @     Posté le 06/04/2007 17:37:52  
Voter pour ce message
Oui, j'ai bien la meme chose pour projet1.dev et Makefile.
Les fichiers ex1.o et matrice.o sont créés.
Donc normallement, ça devrait marcher?
Minus-et-Cortex
  
   
      ?   @     Posté le 06/04/2007 18:03:00  
Voter pour ce message
En tout cas, cela fonctionne bien chez moi. Essaye peut-être en sélectionnant l'option Tout reconstruire dans le menu Executer (raccourci Ctrl+F11).

@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
LunaSev
  
   
      ?   @     Posté le 06/04/2007 18:06:47  
Voter pour ce message
ça ne marche pas non plus...

merci beaucoup d'avoir essayé, et si quelqu'un a du temps à perdre, il peut tenter de m'aider!^^

Quoi qu'il en soit, je vous tiendrais au courant.
Merci encore
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> [dev-c++] undefined reference to

Aller à :

Page générée en : 0.159s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Essais automobiles 
Vidéo Audi Q5 : Chez les SUV compacts huppés, BMW faisait jusqu'ici cavalier seul avec le X3.
Salaires
Roumanie, Inde, Vietnam, Chine, Maroc,... découvrez les salaires des informaticiens à l'étranger