Mac下安装i386编译工具

本文介绍了在Mac系统中为了编译32位ELF文件,如何安装i386编译工具的过程。包括从GNU下载binutils和GCC,设置环境变量,编译并安装这两个工具,以及解决GCC依赖库问题。最后展示了如何使用新安装的工具编译源码。
摘要由CSDN通过智能技术生成

在学习《Orange‘S:一个操作系统的实现》时,作者使用nasm和gcc生成ELF文件,然后使用ld命令链接。但是他是在Linux上做的,Mac系统的gcc(clang)只能生成Mac自己的macho64格式的C中间文件,所以需要安装i386编译工具。

由于书中是在IA32上开发的,所以所有的汇编和C语言都必须编译为32位的ELF,所以我选择了i386系列工具。如果有想要其他架构和平台的,过程也差不多。

参考博客为Dani Rodríguez的博客(好像要翻墙)

下载

首先去GNU下载binutilsGCC工具

wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.25.tar.gz
wget ftp://ftp.gnu.org/gnu/gcc/gcc-5.2.0/gcc-5.2.0.tar.gz

然后解压

tar -zxf binutils-2.25.tar.gz
tar -zxf gcc-5.2.0.tar.gz

##安装
首先生命变量PERFIX:

export PREFIX=/usr/opt/

这个变量说明了最后生成的工具安装在哪里,可以改成你喜欢的路径。

先编译binutils,进入binutils的文件夹,新建build文件夹,进入build文件夹:

cd binutils-2.25
mkdir build
cd build

然后运行configure程序:

../configure --prefix=$PREFIX \
   --target=i386-elf --disable-multilib \
   --disable-nls --disable-werror

这里--target说明我们要生成i386-elf类工具,想要其他平台的自行改动。

等待configure好之后,直接运行make,然后安装即可:

make
make install

然后安装GCC。先进入文件夹。

这里要注意,gcc需要gmp,mpc,mpfr,isl三个库。这里比较坑的地方时,isl库最新版本没有GCC编译需要的函数,所以光用homebrew安装isl,在编译时还是会报错。

这里建议运行:

./contrib/download_prerequisites

让GCC自己下载并编译需要的第三方库。这应该是一个漫长的等待。

然后新建build文件夹,进入build文件夹:

../configure --prefix=$PREFIX --target=i386-elf \
   --disable-multilib --disable-nls --disable-werror \
   --without-headers --enable-languages=c,c++

然后就可以make了:

make all-gcc install-gcc
make all-target-libgcc install-target-libgcc

至此,所有的工具就安装完成了。

##编译Organe’s源码
这里以/chapter5/b文件夹下的源码为例:

nasm -felf32 foo.asm -o foo.o
i386-elf-gcc -c -o bar.o bar.c
i386-elf-ld -s -o bar.bin bar.o foo.o

通过使用i386的elf格式工具,可以成功编译出来。

本文转载至VISUALGMQ的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值