将文件链接到内核时出错
Error in linking files into a kernel
我有问题。我已经编译了文件boot.o:
[BITS 16]
[ORG 0x7C00]
[global start]
[extern _main]
start:
call _main
cli
hlt
和编译后的c++文件main.o:
int main(){
//processes
}
我使用这个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
。有人知道怎么修理吗?
可能是-oformat bin?
我怀疑你是否能够启动它,无论如何…去阅读一些引导程序教程(在osdev.org和brokenthorn.com上),你会得到一个答案。
您正在使用编译器和工具链来生成windows可执行文件,而不是普通的二进制文件。您需要一个用于内核开发的交叉编译器。此外,您还需要一个引导加载程序,一个内核,即使是最小的,也无法容纳512字节的引导扇区。如果我说错了请指正,但你似乎根本不懂电脑的操作程序。我建议从http://wiki.osdev.org/开始。
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- CUDA内核和数学函数的显式命名空间
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- 将文件链接到内核时出错