c语言 - 又一个'undefined reference to _main'



我一直在尝试将当前操作系统项目的大部分从x86 Assembly转换为C,并使用NASM进行组装和使用MinGW进行编译。链接时,我会收到以下错误:

ld: warning: cannot find entry symbol start; defaulting to 00100000
omain.o:main.c:(.text+0x7): undefined reference to `_main'

这是我正在编译、组装和链接的脚本:

gcc -c main.c -o omain.o -fno-leading-underscore
nasm boot.asm -o oboot.o -fcoff
ld -o binkernel.bin oboot.o omain.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 $

我怀疑我遇到的这个问题是因为微软像往常一样愚蠢,需要某种下划线前缀之类的东西。有人能为这个问题提供一个解决方案吗?干杯

我怀疑问题是您没有链接到标准的C库中,该库将_main作为程序的主要入口点。CCD_ 2调用CCD_。尝试使用void _main()exit()而不是返回。

相关内容

最新更新