связь между .h и .c файлом в C - PullRequest
1 голос
/ 23 апреля 2011

Возможный дубликат:
Что такое & ldquo; единица перевода & rdquo; в C ++

Возможен дубликат: Что такое «единица перевода» в C ++

x.h:

void f();

x.c:

void f(){}

main.c:

#include"x.h"
int main(){
    f();
}

тогда я использую: gcc -o a.out main.c почему говорят, что f - неопределенный символ?

Ответы [ 5 ]

4 голосов
/ 23 апреля 2011

Это ошибка компоновщика.Вам необходимо скомпилировать main.c и x.c одновременно или скомпилировать их отдельно без ссылки и связать получившиеся объектные файлы.

Например:

gcc -o x.o -c x.c
gcc -o main.o -c main.c
gcc -o myexecutable main.o x.o
1 голос
/ 23 апреля 2011

Это потому, что x.h просто содержит объявление, которое не определяет символ. x.c содержит определение.

Попробуйте

gcc -o a.out main.c x.c
0 голосов
/ 23 апреля 2011

Следует сказать это во время компиляции, но, вероятно, во время компоновки. Вы еще не скомпилировали x.c (gcc -c x.c)?

0 голосов
/ 23 апреля 2011

Поскольку f не определено в x.h, оно только объявлено. Вам нужно связать x.o с вашим исполняемым файлом. Если вы не используете IDE, вы можете настроить Makefile для обработки этого и вызвать make для создания вашего проекта.

0 голосов
/ 23 апреля 2011

Вы также должны включить x.h в файл x.c и убедиться, что определение не используется дважды следующим кодом:

#ifndef X_H
#define X_H
f();
#endif

А затем используйте gcc -o a.out main.c x.c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...