Отсутствует ошибка компиляции символа в C. Базовая настройка файла заголовка - PullRequest
2 голосов
/ 14 января 2012

Я работаю над проектом C, реализующим некоторые универсальные контейнеры, и у меня возникает эта странная проблема при компиляции.Вот пример кода, который также повторяет ошибку.

foo.h

void fooprint(void);

foo.c

 #include "foo.h"
 #include <stdio>
 void fooprint(void){
    printf("bar");
    return;
 }

main.c

#include "foo.h"

int main(void){
    fooprint();
    return 0;
}

Я компилирую, набрав

gcc main.c -o main

и это то, что выводит терминал

Undefined symbols:
"_fooprint", referenced from:
  _main in ccfMXGzj.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Я компилирую это в системе OSX, но также пытался компилировать на машине с красной шляпой с тем же эффектом.

Решение, вероятно, мучительно очевидно, но у меня было несколько друзей, с которыми я работаю, и они не могли увидеть проблему.Я много гуглял, но большинство проблем с символами обычно относятся к цели C.

Ответы [ 2 ]

1 голос
/ 14 января 2012

Вы также должны скомпилировать foo.c в объектный файл и связать их все вместе:

gcc -o foo.o foo.c
gcc -o main.o main.c
gcc -o main main.o foo.o

Да, это просто, поэтому я рекомендую вам прочитать хорошую книгу по Си и выполнить эти простые шаги.

1 голос
/ 14 января 2012

Вам нужно собрать их вместе:

gcc -Wall -Wextra -o main main.c foo.c

Или, может быть, сделать Makefile?

all: main

main: main.o foo.o

main.o: main.c

foo.o: foo.c
...