gpt4 book ai didi

macos - OS X中的GNU Linker等效命令

转载 作者:行者123 更新时间:2023-12-04 23:00:48 27 4
gpt4 key购买 nike

我正在阅读有关操作系统的the following book。在第43页中,他们使用以下命令将带注释的机器代码转换为原始机器代码文件:

$ ld -o basic.bin -Ttext 0x0 --oformat binary basic.o

在MacBook Pro(运行Mavericks)中运行该命令时,我得到:
ld: unknown option: -Ttext

我进行了一些研究,发现OS X的链接器不允许使用脚本文件作为链接器脚本。

互联网上的其他一些文章建议使用以下“正确”格式:
$ ld -T text 0x0 --o format binary -o basic.bin basic.o

虽然这对我也不起作用。

我还尝试通过 binutils安装 homebrew,但GNU链接器似乎未提供它。

该命令可以在Ubuntu 14.04中正确运行,但是如果可能的话,我想继续在OS X中进行开发。

有没有一种方法可以使用OS X的链接器获得相同的结果,并且可能使用不同的标志?

更新:

我可以使用 gobjcopy中的 binutils通过以下命令生成bin:
$ gobjcopy -j .text -O binary basic.o basic.bin

但是我找不到在代码中偏移标签地址的方法,例如我可以使用带有 -Ttext 0x1000的GNU ld。

我尝试了 --set-start <hex>,但没有任何运气:
$ gobjcopy -j .text --set-start 0x1000 -O binary basic.o basic.bin

最佳答案

我正在遵循相同的os-dev.pdf指南,并且遇到了与您相同的问题。

问题的根本是无论如何我们都需要编译交叉编译的gcc,因此解决方案就是这样做。

有一个很好的at OSDev指南,但是如果您正在运行OSX的最新版本,则我为此on Github准备了一个特定指南

这里是命令,不过在将整个文本墙粘贴到计算机上之前,请先对其进行测试!在Github链接上可以找到完整的说明,但是由于Stack Overflow似乎喜欢答案中嵌入的解决方案,因此就在这里。

另外,如果您遇到任何错误,请将其报告给我(此处或有Github问题),以便我为他人修复。

brew install gmp
brew install mpfr
brew install libmpc
brew install gcc

export CC=/usr/local/bin/gcc-4.9
export LD=/usr/local/bin/gcc-4.9

export PREFIX="/usr/local/i386elfgcc"
export TARGET=i386-elf
export PATH="$PREFIX/bin:$PATH"

mkdir /tmp/src
cd /tmp/src
curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.24.tar.gz # If the link 404's, look for a more recent version
tar xf binutils-2.24.tar.gz
mkdir binutils-build
cd binutils-build
../binutils-2.24/configure --target=$TARGET --enable-interwork --enable-multilib --disable-nls --disable-werror --prefix=$PREFIX 2>&1 | tee configure.log
make all install 2>&1 | tee make.log

cd /tmp/src
curl -O http://mirror.bbln.org/gcc/releases/gcc-4.9.1/gcc-4.9.1.tar.bz2
tar xf gcc-4.9.1.tar.bz2
mkdir gcc-build
cd gcc-build
../gcc-4.9.1/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --disable-libssp --enable-languages=c --without-headers
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc

您可以在 /usr/local/i386elfgcc/bin上找到GNU的binutils和交叉编译的gcc

关于macos - OS X中的GNU Linker等效命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634708/

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