Я не могу найти файл C - PullRequest
0 голосов
/ 21 апреля 2009

У меня есть файл сборки и файл c, скомпилированный с файлами .o (start.o и main.o), и я пытаюсь связать их с помощью ld. Я использую эту команду:

ld -T link.ld -o kernel.bin start.o main.o

где link.ld - это скрипт компоновщика, но когда я его запускаю, я получаю эту ошибку:

start.o:start.o:(.text+0x2d): undefined reference to `_main'

в файле сборки я вызываю файл c с этой функцией:

stublet:
extern _main
call _main

jmp $

Кто-нибудь может увидеть, что не так?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2009

Некоторые компиляторы (например, GCC для Linux) по умолчанию не добавляют _ в экспорт библиотеки C. Попробуйте nm main.o, чтобы увидеть реальное имя ссылки. Это может быть main, а не _main.

0 голосов
/ 21 апреля 2009

Некоторые компоновщики чувствительны к порядку появления объектных файлов или библиотек в командной строке - попробуйте поменять местами порядок двух ваших объектных файлов.

Следует также отметить, что стандарт C не гарантирует, что main () является функцией - фактически программам на C явно запрещено вызывать main.

...