【发布时间】:2017-04-18 22:31:26
【问题描述】:
我正在运行 OS X 10.12,并且正在开发一个基本的基于文本的操作系统。我开发了一个引导加载程序,它似乎运行良好。我唯一的问题是,当我尝试将内核编译为纯二进制时,链接器将无法工作。我做了一些研究,我认为这是因为 OS X 运行的是 Darwin 链接器而不是 GNU 链接器。因此,我下载并安装了 GNU binutils。但是还是不行……
这是我的内核:
void main() {
// Create pointer to a character and point it to the first cell of video
// memory (i.e. the top-left)
char* video_memory = (char*) 0xb8000;
// At that address, put an x
*video_memory = 'x';
}
这是我尝试编译它的时候:
Hazims-MacBook-Pro:32 bit root# gcc -ffreestanding -c kernel.c -o kernel.o
Hazims-MacBook-Pro:32 bit root# ld -o kernel.bin -T text 0x1000 kernel.o --oformat binary
ld: unknown option: -T
Hazims-MacBook-Pro:32 bit root#
我很想知道如何解决这个问题。感谢您的宝贵时间。
【问题讨论】:
-
你有一个额外的空间,你错过了
=登录-T text 0x1000应该是-Ttext=0x1000。请参阅手册。如果还是不行,请按照手册再次尝试--section-start=.text=0x1000。 -
@Jester 在尝试您所说的内容时出现此错误:'ld: unknown option: --section-start=.text=0x1000'
-
ld --version说什么? -
ld --version 不起作用所以我尝试了 ld -v 并提出了这个:'@(#)PROGRAM:ld PROJECT:ld64-274.1 配置为支持拱门:armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS) LTO 支持使用:LLVM 版本 8.0.0,(clang-800.0.42.1) TAPI 支持使用:Apple TAPI 版本 1.30'
-
这不是您声称的 GNU 链接器。要么你没有正确安装它,要么你没有调用正确的二进制文件。
标签: c gcc assembly operating-system ld