【发布时间】:2011-10-14 20:24:43
【问题描述】:
我有问题。我已经编译了 boot.o 文件:
[BITS 16]
[ORG 0x7C00]
[global start]
[extern _main]
start:
call _main
cli
hlt
并编译C++文件main.o:
int main(){
//processes
}
我正在使用这个 LD 文件 linker.ld 进行链接:
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
. = 0x100000;
.text ALIGN(4096) :
{
*(.text*)
*(.gnu.linkonce.t*)
}
.rodata ALIGN(4096) :
{
start_ctors = .;
*(.ctor*)
end_ctors = .;
start_dtors = .;
*(.dtor*)
end_dtors = .;
*(.rodata*)
*(.gnu.linkonce.r*)
}
.data ALIGN(4096) :
{
*(.data*)
*(.gnu.linkonce.d*)
}
.bss ALIGN(4096) :
{
*(.COMMON*)
*(.bss*)
*(.gnu.linkonce.b*)
}
}
所以我想开始链接,我在 windows 上使用 g++,我在 cmd 中使用这个命令:ld -T linker.ld -o kernle.bin main.o boot.o。并且拒绝我错误:ld: cannot preform PE operations on non PE output file kernel.bin。有谁知道我该如何修复它?请帮帮我。
【问题讨论】:
标签: c++ assembly linker operating-system kernel