[Help] LD is saying undefined reference.

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
GermanSensation
Posts: 1
Joined: Thu Jan 24, 2019 10:51 pm
Libera.chat IRC: GermanSensation

[Help] LD is saying undefined reference.

Post by GermanSensation »

Hey guys,

It's been about eight years since I last did anything OS Dev related, and I want to get back into it. I'm taking baby steps to refresh my memory; however, I'm running into an issue with linking that I can't figure out. Whenever I try to link my object files, I get this error in the terminal:

Code: Select all

start.o: In function `stublet':
start.asm:(.text+0x29): undefined reference to `_main'
I'm running 64-bit Linux Mint in Parallels on Mac OS X.

I have start.asm with this snippet of code:

Code: Select all

stublet:
     extern _main
     call _main
     jmp $
To compile the asm file, I'm using this:

Code: Select all

nasm -f elf64 -o start.o start.asm
main.c

Code: Select all

void main(){
 ...
}
To compile main.c, I'm using these arguments:

Code: Select all

gcc -Wall -o -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -I./include -c -o main.o main.c
Finally, to link them, I'm using this:

Code: Select all

ld -T linker.ld -o kernel.bin start.o main.o
Is the error caused to the way I'm compile my ASM, linking my files, or the way I'm calling an external function from Assembly?

Thanks for all the help! It's going to take a little bit to get back in the grove of things.

I'm also going based off of Bran's Kernel Development guide (figured that might be a decent place to start with a memory refresher)... although, a lot of it seems questionable. Does anyone have any opinions on that guide?
User avatar
zity
Member
Member
Posts: 99
Joined: Mon Jul 13, 2009 5:52 am
Location: Denmark

Re: [Help] LD is saying undefined reference.

Post by zity »

Hi GermanSensation,

In your asm file you should probably remove the underscores and simply call "main" instead of "_main". With that being said, I have two more comments.

First, you should build a proper cross compiler, as this will make your life easier in the future. Have a look here: https://wiki.osdev.org/GCC_Cross-Compiler

Bran's Kernel Development guide is known to contain bugs, so be careful about using it. The wiki has a list of known bugs (but the list might not be exhaustive): https://wiki.osdev.org/Bran%27s_Known_Bugs
Post Reply