C - référence non définie à la fonction d'erreur avec les fichiers liés
J'ai commencé la mise en œuvre d'un programme d'envergure. Mais j'ai rencontré un énorme problème. Donc, ici, est très simplifié le code de mon programme. J'ai un séparé .fichier c pour mes fonctions, qui est normal.c le programme principal est principal.c et j'ai lié les deux avec cal.h fichier d'en-tête.
principal.c
#include <stdio.h>
#include "cal.h"
void main()
{
int num1, num2, ans;
num1=5;
num2=5;
ans=add(num1, num2);
printf("%d" ,ans);
}
normal.c
#include "cal.h"
int add(int num1, int num2)
{
return num1+num2;
}
cal.h
#ifndef CAL_H_INCLUDED
#define CAL_H_INCLUDED
#include <errno.h>
int add(int num1, int num2);
#endif //CAL_H_INCLUDED
mais quand je compile, il me donne l'erreur
..\main.c|10|undefined reference to `ajouter'|
J'utilise CodeBlocks v. 13.12 dans Windows 8.1 Toute réponse à cette question est très apprécié. J'ai essayé avec CodeLite, mais la même erreur se produit. Merci!!!!
- Lorsque vous êtes en reliant les fichiers, ne vous comprennent
normal.o
? - Non, je n'ai pas. Et je suis désolé car je suis novice en C je n'ai aucune idée sur le travail avec les
.o
fichiers. Une explication serait d'une grande aide! - Je ne peux pas parler de la manière dont CodeBlocks œuvres, mais ici, c'est généralement la façon dont C la compilation fonctionne. Chaque .c fichier est compilé séparément pour une .o fichier (un fichier objet"). Si votre principal.c sera compilé à la main.o, et normal.c sera compilé à la normale.o. Aucune de ces sont exécutables, et ne sont pas des programmes complets. Ensuite, l'objet de deux fichiers sont liés ensemble. "Lié" dans ce cas est un terme technique, contrairement à votre utilisation -- c'est une étape réalisée par l'éditeur de liens. L'éditeur de liens génère de votre exécutable. Généralement IDEs automatiquement le lien entre toutes .c fichiers dans le même projet.
- Ouais je l'ai eu, mais cela semble, il n'a pas de lien de ces deux fichiers. Sinon, le
add
ne peut pas être défini. Des suggestions pour résoudre ce problème? - Double Possible de Ce qui est une référence non définie/externe non résolu symbole d'erreur et comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Compilation complète du code est nécessaire dans le terminal ubuntu
utiliser les éléments suivants
Blocs de Code ont la liaison automatique mais pour cela vous devez avoir votre source et les fichiers d'en-tête cadre d'un projet.
J'ai eu le même problème quand j'ai fait individuel .c & .h les fichiers et les attendus de l'IDE pour le lien des fichiers de l'objet, mais il a échoué. Je les ai mis sous un projet et cela a fonctionné!
Utilisation complète de la compilation de votre code.
si votre c codefiles principal.c et normal.c dans ./src et le fichier d'en-tête cal.h est dans ./inc suivre la méthode ci-dessous à partir du répertoire courant(.)
g++ ./src/main.c ./src/normal.c -I ./inc -o
maintenant principal est hors de fichier binaire à exécuter.