Ошибка при связывании основного файла с моим заголовочным файлом: неопределенная ссылка на `myHeaderFunction’

#c #header-files

#c #заголовочные файлы

Вопрос:

Я пытаюсь создать свой первый заголовочный файл на C.

В одном каталоге находятся три файла.

myHeaderFile.h

 // It is a good practise to only declare function in header file. 
int myHeaderFunction();
 

myHeaderFile.c

 #include "myHeaderFile.h"

int myHeaderFunction()
{
    return 1;
}
 

main.c

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

int main()
{
    printf("main function.n");
    int output;
    output = myHeaderFunction();
    printf("%dn",output);
    return 0;
}
 

Хронология:

  1. Я создал первый файл myHeaderFile.h и сохранил его.
  2. Затем я создал myHeaderFile.h и сохранил его.
  3. Затем я создал main.h и сохранил его. (Я не запускал ни один из приведенных выше файлов ‘
  4. Я открыл консоль и написал команду, как написано ниже.
  5. Затем я запускаю main.h , и он выдает ошибку, как указано ниже.

Я открываю консоль в том же каталоге и набираю:

 gcc -Wall -o combined main.c myHeaderFile.c
 

Он создает файл с именем combined.exe

А затем я запускаю main.c, и он выдает ошибку

 undefined reference to `myHeaderFunction'
collect2.exe: error: ld returned 1 exit status
 

Есть несколько ответов на ошибку
undefined reference to `myHeaderFunction' , но она включает в себя слишком много функций, файлов и команд gcc, которые я не понимал как новичок.
Поэтому я прошу не закрывать этот ответ и дать решение, специфичное для этой проблемы.

Комментарии:

1. «И затем я запускаю main.c» — что это значит? Вы запускаете исполняемые программы, но не запускаете исходные файлы.

2. Вы работаете в Windows, верно? Разве вывод двоичного файла не должен быть с .exe расширением ( -o combined.exe )?

3. » Все файлы создаются и хранятся таким же образом, как показано здесь». — Приводит ли приведенный вами пример к этой ошибке?

4. @Crowman Я открываю файл в VS Code (в котором был код) и нажимаю CTRL ALT N, который, я думаю, является командой для запуска. Но дает ли это какую-либо информацию для решения проблемы?

5. @Ash Вы не можете запустить main.c — это исходный код, а не исполняемый файл. combined.exe создается программа, это то, что вы хотите запустить. И это ничего не делает. Вероятно, так оно и есть, но делает это так быстро, что закрывается еще до того, как вы успеваете его увидеть (он открывает новую консоль, печатает, а затем консоль закрывается, когда программа завершает свою работу). Запускайте ./combined.exe с консоли вместо двойного щелчка.