我一直在試圖將我當前的OS項目的大部分從x86彙編轉換爲C,並與NASM彙編並使用MinGW進行編譯。 鏈接時,我得到這些錯誤:另一個'未定義的_main參考'
ld: warning: cannot find entry symbol start; defaulting to 00100000
o\main.o:main.c:(.text+0x7): undefined reference to `_main'
這裏是我compilng,組裝和與鏈接腳本:
gcc -c main.c -o o\main.o -fno-leading-underscore
nasm boot.asm -o o\boot.o -fcoff
ld -o bin\kernel.bin o\boot.o o\main.o -Tlink.ld
...和我的鏈接腳本如下:
ENTRY(start)
SECTIONS
{
.text 0x100000 :
{
code = .;
_code = .;
__code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
data = .;
_data = .;
__data = .;
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
bss = .;
_bss = .;
__bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .;
_end = .;
__end = .;
}
當我在main.o上使用nm時,它表示有符號'__main',但我聲明它是這樣的:
int main()
{
return 0xDEADBABA;
}
這裏的boot.asm:
MBOOT_PAGE_ALIGN equ 1<<0 ; Load kernel and modules on a page boundary
MBOOT_MEM_INFO equ 1<<1 ; Provide your kernel with memory info
MBOOT_HEADER_MAGIC equ 0x1BADB002 ; Multiboot Magic value
MBOOT_HEADER_FLAGS equ MBOOT_PAGE_ALIGN | MBOOT_MEM_INFO
MBOOT_CHECKSUM equ -(MBOOT_HEADER_MAGIC + MBOOT_HEADER_FLAGS)
[bits 32]
[global mboot]
[extern code]
[extern bss]
[extern end]
mboot:
dd MBOOT_HEADER_MAGIC
dd MBOOT_HEADER_FLAGS
dd MBOOT_CHECKSUM
dd mboot
dd code
dd bss
dd end
dd start
[extern main]
[global start]
start:
push ebx
cli
call main
jmp $
我懷疑我有這個問題,是因爲微軟是他們一貫的,愚蠢的自我,需要某種形式的下劃線前綴或東西的。 任何人都可以請提供解決這個問題的方法嗎? 乾杯。
向我們展示'boot.asm'。 – oldrinb
當然,只是編輯我的問題,並添加它 – phillid
嗯,我敢打賭微軟已經做得很好:D。如果您不使用-fno-leading-underscore,那麼'main'符號是什麼樣子的? – Pyjong