我有問題。我已編譯的文件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*)
}
} 所以我想開始鏈接,並且我正在使用g ++ for windows,並且我在cmd中使用這個命令:ld -T linker.ld -o kernle.bin main.o boot.o
。並拒絕我錯誤:ld: cannot preform PE operations on non PE output file kernel.bin
。有誰知道我該如何修復它?請幫幫我。
這我有形式osdever。 – FrewCen
你永遠不會讓你的C++內核適合512字節(引導扇區),你將無法在16位實模式下運行它(處理器在啓動時工作)等等。我建議閱讀[入門](http://wiki.osdev.org/Getting_Started),[引導順序](http://wiki.osdev.org/Boot_sequence)和[Bootloader](http://wiki.osdev .org/Bootloader)在osdev.org維基上的文章(以...開頭)。 – Griwes