Почему несколько определений?Почему другие ссылки не определены?Это действительно просто, что мне не хватает? - PullRequest
0 голосов
/ 28 октября 2010

У меня есть небольшой проект, который мне нужно скомпилировать.У меня есть один заголовок и один источник, который я создал, и почти пустой файл driver.c, который включает мой заголовок.
Замечание:

// 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

Теперь мой файл реализации:

// 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....  

Теперь драйвер, который включает мой заголовок и обеспечивает main ():

//main.c
#include "iol.h"

Моя команда bash:

gcc iol.c driver.c -l"ncurses"

Я получаю обратно:

/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

Я просто хочу добраться до точки, где я могу скомпилировать это, и начать рвать на себе волосы, потому что все мои ошибки сегмента.В чем проблема в моей настройке?Я RTFM на компиляторе Gnu C, по-видимому, я делаю то, что я должен, то есть объявить вещи в iol.h , определить в iol.c и использовать в driver.c это довольно тривиальные вещи, может быть, мне просто нужен второй набор глаз: S
Я на самом делеполучаю длинный список ошибок, если кто-то сочтет это уместным, я с удовольствием выложу весь источник.

Ответы [ 3 ]

1 голос
/ 28 октября 2010

это компоновщик жалуется. Это то, что вы получите, если бы в заголовочном файле была определена функция, которая не была объявлена ​​«встроенной»

отсутствуют, потому что вы не добавили правильные библиотеки

0 голосов
/ 28 октября 2010

Вы не упомянули, компилируете ли вы в Windows или Unix. Если в Windows я подозреваю, что в файлах .h есть зависимости порядка. Обычно сначала вам нужен windows.h, чтобы он определял константы, которые будут использовать другие файлы .h.

0 голосов
/ 28 октября 2010

Попробуйте скомпилировать их отдельно:

$ gcc -Wall -c ioi.c
$ gcc -Wall -c driver.c
$ gcc ioi.o driver.o -o program -lncurses

Чтобы выделить и исправить ошибки компиляции ...

...