J'ai un petit projet que j'ai besoin de compiler. J'ai un en-tête et une source que j'ai créés et un driver.c presque vide qui inclut mon en-tête.
Observe:Pourquoi plusieurs définitions? Pourquoi les autres références ne sont-elles pas définies? C'est vraiment basique, qu'est-ce qui me manque?
// iol.h
#ifndef __IOL_HEADER
#define __IOL_HEADER
/* program: iol.h
date: 5 October 2010
*/
#define UNIX 1
#define WINDOWS 2
#define OS UNIX
#if OS == UNIX
#include <ncurses.h>
#elif OS == WINDOWS
#include <conio.h>
#include <windows.h>
// Function declarations!
#endif
void iol_init(void);
#endif
maintenant mon dossier de mise en œuvre:
// iol.c
#include <string.h>
#include <stdlib.h>
#include "iol.h"
void iol_init(void) {
#if OS == WINDOWS
/* no startup required for windows */
#elif OS == UNIX
initscr();
noecho();
cbreak();
keypad(stdscr, 1);
// Implmntn continues....
Maintenant, le pilote qui comprend ma tête et fournit la main():
//main.c
#include "iol.h"
Ma commande bash:
gcc iol.c driver.c -l"ncurses"
je reviens:
/tmp/ccmmW6hQ.o:iol.c:(.text+0x83f): first defined here
/tmp/ccwIKUaT.o: In function 'isEscaping':
driver.c:(.text+0xbab): multiple definition of 'isEscaping'
/tmp/ccmmW6hQ.o:iol.c:(.text+0xbab): first defined here
/tmp/ccwIKUaT.o: In function 'initSeq':
..
driver.c:(.text+0x149): undefined reference to 'iol_prnstr'
driver.c:(.text+0x178): undefined reference to 'iol_putch'
..
driver.c:(.text+0x726): undefined reference to 'iol_display'
collect2: ld returned 1 exit status
Je veux juste aller au point où je peux compiler cela, et commencer à déchirer mes cheveux « cuz de tous mes seg-fautes. Quel est le problème dans ma configuration? Je RTFM sur le compilateur C Gnu apparemment, je fais ce que je suis censé, ce qui est déclare choses dans iol.h, définissent dans iol.c et utilisation dans pilote .c ce sont des choses assez triviales peut-être que j'ai juste besoin d'un deuxième ensemble d'yeux: S
Je reçois effectivement une longue liste d'erreurs, si quelqu'un pense que c'est pertinent, je suis heureux de publier l'ensemble de la source.
Qu'est-ce 'isEscaping'? Qu'est-ce que 'initSeq'? Où sont 'iol_prnstr',' iol_putch' et 'iol_display'? Veuillez envisager de réduire votre code au plus petit exemple possible qui présente toujours le problème. –
ils sont d'autres routines _declared_ dans iol.h et _deefined_ dans iol.c. Ceux-ci ne sont pas vraiment liés à la solution, car ** chaque ** fonction que j'ai écrite jette à la fois une «erreur de référence indéfinie» et une erreur de définition multiple - quelque chose de mal avec le lien ... je sais que je dois lier manuellement dans ncurses, qui est spécifique à ce projet (un éditeur de console multiplateforme) –
Eh bien, pourriez-vous au moins poster des extraits de code qui correspondent aux extraits de votre message d'erreur? –