当前位置:网站首页>常用工具链和虚拟环境-Cygwin
常用工具链和虚拟环境-Cygwin
2022-08-03 01:12:00 【有一点甜】
发散
没想到学习LVGL的第一步,竟然是介绍工具链和虚拟环境吧?哈哈,工欲善其事必先利其器,了解自己的使用工具将事半功倍。先想想,我们的工具大概都运行在哪里?大概就三个:windows、UNIX、Linux。编译出来的程序运行在哪里?大概有四个:windows、UNIX、Linux、嵌入式硬件。也就是说,在windows、UNIX、Linux(大概率都是X86)上运行的程序,直接在其之上部署好开发工具,然后开发就好了。而嵌入式硬件(ARM、RISC-V、PPC、MIPS)上运行的程序,则需要在其它平台上部署开发工具,为啥?因为嵌入式硬件一般连操作系统都没有哇。。。即使有,受限于硬件,大概率也没有丰富的资源让你部署开发工具。因此,交叉工具链环境,就是需要的了。
大概总结了一下,主要有以下需要了解:
- Cygwin
- msys以及msy2
- minGW与MinGW-w64
- WSL
- TDM
- 各版本工具链
Cygwin
Cygwin官网:Cygwin
Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件。该公司开发的著名工具还有eCos,不过现已被redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIX到Windoinuxws的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。
Cygwin 提供了一套抽象层 dll,用于将部分 Posix 调用转换成 Windows 的 API 调用,实现相关功能。cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是Cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于 win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。
因此,Cygwin是运行于Windows平台的POSIX“子系统”,提供Windows下的类Unix环境,并提供将部分 Linux 应用“移植”到Windows平台的开发环境的一套软件。按照开玩笑的话来讲,Cygwin 基本上就是传说中的 GNU/NT 系统(对照 GNU/Linux,GNU/BSD,GNU/HURD)。
那么Cygwin能干啥呢?常见的应用场合包括但不限于:
- shell命令行使用,如果你想在windows上体验Linux命令,又不想安装虚拟机,那么使用Cygwin吧
- 交叉工具链编译,Cygwin环境中已移植好了gcc等开发工具,大量的交叉工具链(如arm-none-gnu-eabi-gcc、arm-none-gnu-eabi-binutils)也可以在Cygwin中制作。
- 程序移植,把符合POSIX标准的程序移植到Windows下,还有更多正在由个人、社区、商业公司、研究机构不断贡献的开源自由软件,造福广大Windows用户,利用已有的GNU、UNIX、Linux软件会使程序移植越来越容易。
安装Cygwin
通过运行 setup-x86 _ 64. exe(不是一键就能安装,它只是一个下载器) 安装 Cygwin。请记住,发行版中的各个包是与 DLL 分开更新的,因此 Cygwin DLL 版本不适合作为一般的 Cygwin 发行版版本号。
边栏推荐
- UVM中SVA使用指南
- 增删改查这么多年,最后栽在MySQL的架构设计上!
- [Example构造方法增加notNull参数,默认false,允许值为null,值为null的时候不加入到条件中
- lombok 下的@Builder和@EqualsAndHashCode(callSuper = true)注解
- async-await
- JSP第一篇 -----JSP九大内置对象(隐式对象)和四大域对象
- 大厂标配 | 百亿级并发系统设计 | 学完薪资框框涨
- 吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第二节:神经网络基础(上)
- OpenWRT setup ipv6 network
- 暴力递归到动态规划 08(小马走象棋)
猜你喜欢

一个接口并发问题的模拟与复现

ASP.NET网络版进销存管理系统源码【源码免费分享】

开源聚力,共创未来 | 麒麟信安祝贺openKylin首个体验版正式发布!

大厂标配 | 百亿级并发系统设计 | 学完薪资框框涨

initramfs详解----设备文件系统

【遥控器开发基础教程4】疯壳·开源编队无人机-SPI(OLED)

Violence recursion to dynamic programming 08 (pony go chess)

mysql容器数据卷持久化

暴力递归到动态规划 06 (剑指 Offer II 095. 最长公共子序列)

SAP ABAP OData 服务如何支持修改(Update)操作试读版
随机推荐
Kubernetes:(八)调度约束和故障排查
9-WebUtil工具类.md
新库上线 | CnOpenDataA股上市公司董监高信息数据
代码工具推荐
2149. 按符号重排数组
js垃圾回收机制
从 npm 切换到 pnpm,真香!
【遥控器开发基础教程5】疯壳·开源编队无人机-SPI(2.4G 双机通信)
国标GB28181协议EasyGBS平台项目现场通知消息过多导致系统卡顿该如何解决?
【面经】被虐了之后,我翻烂了equals源码,总结如下
sql注入是什么意思以及防止sql注入?
visual studio 2012 为啥这么优秀
【图像分类】2021-EfficientNetV2 CVPR
全栈----跨域
.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
initramfs详解-----初识initramfs
Shell脚本乘法口诀等小实验
MySQL删库不跑路
ASP.NET网络版进销存管理系统源码【源码免费分享】
VS2010 组件列表与对应名称