В функции `_start ': init.c :(. Text + 0x30): неопределенная ссылка на` main' - PullRequest
4 голосов
/ 03 мая 2010

Я работаю над проектом C с около 30 исходными файлами (.c). Я строю этот проект на 32-битном микроконтроллере (i.MX515), работающем в Ubuntu с использованием инструментов GNU.

Фаза компиляции завершается успешно, однако, когда начинается процесс связывания, я получаю эту ошибку (для полной ошибки в конце вопроса) :

In function `_start': init.c:(.text+0x30): undefined reference to `main'

У меня есть функция main(), которая выполняет простую printf().

Моя строка Makefile для компоновки выглядит следующим образом.

final: $(OBJDIR)/main.o $(OBJDIR)/TchClaKnn_BuildKdtreeInt.o $(OBJDIR)/TchClaKnn_FreeKdtreeInt.o.... (Go upto 30 files like this)
    @echo ".Linking"
    $(CC) $(LFLAGS) -o $(OBJDIR)/main.o $(OBJDIR)/TchClaKnn_BuildKdtreeInt.o $(OBJDIR)/TchClaKnn_FreeKdtreeInt.o..... (Go upto 30 files like this)

Помощь !!!

Привет

Викрам


Полная ошибка связывания

/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o: In function `_start':
init.c:(.text+0x30): undefined reference to `main'
collect2: ld returned 1 exit status
make[1]: *** [final] Error 1
make[1]: Leaving directory `/home/ubuntu/Documents/Project/IMX_Project_v1'
make: *** [all] Error 2

Ответы [ 2 ]

8 голосов
/ 03 мая 2010

final зависит от main.o (и множества других), но ваш make-файл берет все «другие» и выводит их в main.o (это то, что -o делает в большинстве компиляторов )

изменить строку ссылки на: -o final $(OBJDIR)/main.o

3 голосов
/ 03 мая 2010

Компоновщик не может найти объектный код для источника, для которого определена функция main (). Вероятно, это не компилируется. Убедитесь, что из 30 файлов, в которых есть main (), компилируется в .OBJ.

...