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


主要是环境配好就行


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


目录
相关文章
|
2月前
|
Dart 开发工具 Android开发
在macOS系统上配置Flutter环境的步骤
在macOS系统上配置Flutter环境的步骤
283 62
|
1月前
|
存储 监控 安全
C语言与操作系统交互探秘
系统调用与库函数 在 C语言中,系统调用是用户程序与操作系统内核交互的桥梁。以下是常见系统调用的概述: 文件操作类:open()、read()、write()、close()、lseek() 进程控制类:fork()、exec()、wait()、exit() 信号处理类:signal()、kill() 进程间通信:pipe()、shmget()、msgget() 网络通信:socket()、bind()、listen()、accept() 系统调用 vs 库函数:
73 20
|
30天前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
46 0
|
4月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
139 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
8月前
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
195 3
|
8月前
|
存储 API C语言
MacOS环境-手写操作系统-46,47-C语言开发应用程序
MacOS环境-手写操作系统-46,47-C语言开发应用程序
94 1
|
8月前
|
存储 C语言 iOS开发
MacOS环境-手写操作系统-48-让内核从错误中恢复
MacOS环境-手写操作系统-48-让内核从错误中恢复
93 0
|
8月前
|
编译器 API C语言
MacOS环境-手写操作系统-45-C语言开发应用程序
MacOS环境-手写操作系统-45-C语言开发应用程序
109 0
|
5月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
292 23

推荐镜像

更多