/* test.c */
void func1()
{
}
int main()
{
func1();
}
Hello, I am making kernel code using C. But I tested above code to know how to build C kernel code. Below command is what I gave to prompt. I am using MinGW on Windows 8.1.
gcc -c -m32 test.c
ld -o test -Ttext 0x00 -e _main test.o
But this error was occurred from ld.
test.o:test.c:(.text+0x7): undefined reference to `__main'
So, I tried different way. add -nostdlib and --freestanding option to gcc. But the result was same. Is __main function in CRT0 ? What should I do to solve this problem.. ?
You could use
gcc
instead ofld
to perform the linking:The
-lgcc
option provides the__main
function.The only viable way if you're really into operating system development is by using some Unix-like OS like GNU/Linux or Mac OS X.
The following two are a must:
Then things like
-Wall
,-Wextra
, and-Werror
are recommended because bugs in kernel code are extremely hard to debug.With respect to the entry point, you usually use a linker script that you pass to
ld
via-T linker.ld
. For example, mine (don't copy paste it!) looks as follows. It's for a higher-half kernel with support for virtual memory: