gpt4 book ai didi

c - 使用ld链接时, undefined reference '__main'

转载 作者:行者123 更新时间:2023-12-02 03:10:53 31 4
gpt4 key购买 nike

/* test.c */

void func1()
{

}

int main()
{
func1();
}

您好,我正在使用 C 语言编写内核代码。但是我测试了上面的代码以了解如何构建 C 内核代码。下面的命令是我给出的提示。我在 Windows 8.1 上使用 MinGW。

gcc -c -m32 test.c
ld -o test -Ttext 0x00 -e _main test.o

但是这个错误是由 ld 发生的。

test.o:test.c:(.text+0x7): undefined reference to `__main'

所以,我尝试了不同的方式。向 gcc 添加 -nostdlib 和 --freestand 选项。但结果是一样的。 __main 函数在 CRT0 中吗?我应该怎么做才能解决这个问题..?

最佳答案

如果您真的热衷于操作系统开发,唯一可行的方法是使用一些类 Unix 操作系统,例如 GNU/Linux 或 Mac OS X。

以下两项是必须的:

-ffreestanding -nostdlib -lgcc

然后推荐使用-Wall-Wextra-Werror之类的东西,因为内核代码中的错误极其困难 进行调试。

对于入口点,您通常使用 linker script通过 -T linker.ld 传递给 ld。例如,我的(不要复制粘贴!)如下所示。这是为了 higher-half kernel支持虚拟内存:

ENTRY(__start__)
OUTPUT_FORMAT(elf32-i386)

SECTIONS {
. = 0xC0100000;

.text BLOCK(4K) : AT(ADDR(.text) - 0xC0000000) {
KEEP(*(.multiboot))
KEEP(*(.boot))
*(.text)
}

.rodata ALIGN(0x1000) : AT(ADDR(.rodata) - 0xC0000000) {
*(.rodata*)
}

.data ALIGN(0x1000) : AT(ADDR(.data) - 0xC0000000) {
*(.data)
}

.bss : AT(ADDR(.bss) - 0xC0000000) {
*(COMMON)
*(.bss)
*(.stack)
}

__kend__ = .;
}

关于c - 使用ld链接时, undefined reference '__main',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32164478/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com