Как я могу связать несколько c-файлов вместе, используя заголовки? - PullRequest
0 голосов
/ 27 января 2019

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

Это мой пример c-кода (function.c):

#include <stdio.h>
#include "function.h"

void output()
{
    printf("Thats a text\n");
}

То есть связанный заголовочный файл (function.h):

//header function.h

#ifndef FUNCTION_H_
#define FUNCTION_H_

#endif // FUNCTION_H_

И это мой main.c:

#include "function.h"

int main()
{
    output();

    return 0;
}

Я ожидал бы следующий вывод:

"Это текст"

Но я получаю только следующую ошибку:

неопределенная ссылка на 'output'

Что я здесь не так делаю?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Ваш заголовок должен быть

//header function.h

#ifndef FUNCTION_H_
#define FUNCTION_H_
void output();

#endif // FUNCTION_H_

скомпилируйте так: (фактические флаги могут зависеть от используемого компилятора)

cc -c main.c

(создает main.o)

cc -c function.c

(создает function.o)

cc main.o function.o

(создает a.out или любой другой тип вашей системы по умолчанию)

... или как кто-то еще упомянул:

cc main.c function.c

(делает все это)

0 голосов
/ 27 января 2019

Вам нужен прототип для output функции в вашем заголовке, чтобы он был виден в других модулях.

//header function.h

#ifndef FUNCTION_H_
#define FUNCTION_H_

void output(void);

#endif // FUNCTION_H_

И вам нужно link модуль (исходный файл function.c), чтобы фактически предоставить определение output, которое использует ваш основной модуль.

Например, вы можете напрямую скомпилировать их вместе с:

gcc main.c function.c -o my_out

Вы также можете посмотреть Makefiles .

...