MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编

简介: MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编

在mac下通过交叉编译:C语言结合汇编

文章写于两年前的 MacBookAir(2015)

目前笔者为 MacBookPro M1 (抽查了部分 都运行正常)

Github项目地址: https://github.com/wdkang123/MyOperatingSystem

MacOS X86架构(x新版的arm架构的我没有 所以大家自行测试)

VirtualBox

C/C++环境 (Xcode必装)


1.安装

因为mac和linux不一样 在mac的gcc和ld等工具 不能够通用


这个时候我们就需要安装交叉编译的环境


下面我提供了两种方式(踩过坑):


(1)brew (再之前系统时正常安装)


(2)port (在我升级了 BigSur 后)之前通过brew安装的在新系统失效了 所以我用port成功安装


理论山来说 brew 和 port 都是管理工具 安装也没有什么大的区别 看个人喜好了


brew 和 port的安装 我就不说了 自己下载后安装好就OK


1.1 方法一 brew 安装

(更新brew是必须的)如果你是比较新的系统的话

brew install i386-elf-binutils
brew install i386-elf-gcc

1.2 方法二 port 安装

port search i386-elf-gcc
sudo port install i386-elf-gcc

2.编译

整体思路

整体思路就是


(1)汇编写的部分 我们通过 nasm 将汇编代码进行编译


(2) C语言的部分 我们通过gcc编译 并对其链接


(3) 将gcc生成的文件进行反汇编 就得到了汇编代码


(4)将(1)的汇编代码 和(3)反汇编后的代码进行结合


(5)将这个汇编文件进行编译 成可执行文件


编译

nasm -f elf32 -o foo.o foo.asm


i386-elf-gcc -m32 -fno-asynchronous-unwind-tables -s -c -o bar.o bar.c


反汇编

objconv这个工具怎么安装 自己到网上找教程


项目中我已经放了我编译好的 和源码文件了 到时候可以直接编译自己的版本 或者 直接使用


./objconv -fnasm bar.o -o bar.asm


链接

i386-elf-ld -m elf_i386 foo.o bar.o -o foobar


主要是环境配好就行


后面会很多次用这些命令 慢慢就熟悉了


相关文章
|
5月前
|
存储 Java C语言
手写操作系统 --汇编执行流(一)
手写操作系统 --汇编执行流(一)
|
12小时前
|
存储 API C语言
MacOS环境-手写操作系统-46,47-C语言开发应用程序
MacOS环境-手写操作系统-46,47-C语言开发应用程序
8 0
|
13小时前
|
编译器 API C语言
MacOS环境-手写操作系统-45-C语言开发应用程序
MacOS环境-手写操作系统-45-C语言开发应用程序
9 0
|
15小时前
|
Java iOS开发 C++
MacOS环境-手写操作系统-03-突破512字节的限制
MacOS环境-手写操作系统-03-突破512字节的限制
5 0
|
5月前
|
编译器 Linux C语言
Linux嵌入式系统之交叉编译中编译器与解释器的区别
Linux嵌入式系统之交叉编译中编译器与解释器的区别
39 0
|
5月前
|
NoSQL Linux
Linux下的系统编程——gdb调试工具(三)
Linux下的系统编程——gdb调试工具(三)
60 0
Linux下的系统编程——gdb调试工具(三)
|
5月前
|
前端开发 Unix Linux
手写操作系统 --汇编执行流(二)
手写操作系统 --汇编执行流(二)
|
10月前
|
编译器 Linux 开发工具
【Linux系统学习】系统编程开发工具编译器gcc/g++使用
上篇文章我们进入Linux系统编程的学习,介绍了代码的编辑器vim多功能编辑器的使用,编辑器的上手还是挺难的,要通过多多练习各个模式的命令集慢慢熟练起来。代码能够编辑后我们就要对代码进行编译运行,在Linux系统中我们使用gcc和g++编译器对我们写的代码进行编译运行。为了深入学习我们将从一个.c的源文件通过预处理、编译、汇编、连接变成我们的可执行程序使用gcc编译器详细呈现。
|
Rust Linux Windows
【RUST 实战】交叉编译之Windows To Linux
【RUST 实战】交叉编译之Windows To Linux
2941 1
【RUST 实战】交叉编译之Windows To Linux
|
Windows
vxworks环境下反汇编工具使用技巧
vxworks环境下反汇编工具使用技巧
350 0
vxworks环境下反汇编工具使用技巧