当前位置:首页 > 科技  > 软件

为什么Golang开发的软件单文件直接丢到各种Linux系统就能运行?

来源: 责编: 时间:2023-12-20 09:23:08 385观看
导读提到跨平台开发,就首先想到C语言,准确的说应该叫ANSI C。ANSI C是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言的标准。ANSI C 主要标准化了现存的实现, 同时增加了一些来自 C++ 的内容 (主要是函数原型) 并

提到跨平台开发,就首先想到C语言,准确的说应该叫ANSI C。vmz28资讯网——每日最新资讯28at.com

ANSI C是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言的标准。ANSI C 主要标准化了现存的实现, 同时增加了一些来自 C++ 的内容 (主要是函数原型) 并支持多国字符集 (包括备受争议的三字符序列)。ANSI C 标准同时规定了 C 运行期库例程的标准。一些开源项目根据ANSI C标准进行开发后,可移植行就非常好。vmz28资讯网——每日最新资讯28at.com

但无奈,随着新指令集的CPU不断出现,如果开发者自己要从ANSI C方式去编码,实现减少由于不同软硬件架构的差异对上层应用的影响,那属实要做很大的基础工作。vmz28资讯网——每日最新资讯28at.com

vmz28资讯网——每日最新资讯28at.com

所以当更加专业的语言Go出来后,由于设计者基于既往设计C语言的成功经验去粗取精,又结合近二三十年来的CPU架构和操作系统、云计算的新趋势,而造出了Go这样的多平台多CPU通吃的语言。正是这种定位,所以Go语言在可执行文件的链接方面就与众不同。vmz28资讯网——每日最新资讯28at.com

比如当小白不小心把linux系统的底层加载程序 ld-linux.so 文件删掉了,vmz28资讯网——每日最新资讯28at.com

vmz28资讯网——每日最新资讯28at.com

准备跑路吧~~ vmz28资讯网——每日最新资讯28at.com

因为此后系统内所有 C/C++/Python/Nodejs/PHP/Java等语言开发编译的可执行文件,全都启动失败,出现莫名其妙的错误,比如cp命令是存在于 /usr/bin/cp 路径的文件,但此时调用cp,报错No such file or directry 。vmz28资讯网——每日最新资讯28at.com

这是因为以上Python等所列的语言,本质上都是C语言开发的,它们的可执行文件的底层链接的系统动态库,要想运行都先依赖于 ld-linux.so 帮它们处理好ELF的二进制可执行文件、链接库的代码段落、数据段等内容加载到内存,然后CPU根据二进制指令执行代码逻辑,处理数据,完成计算任务。而这个底层的 ld-linux.so 动态库文件一旦自身不保,那么,其他依赖的软件当然全部异常。vmz28资讯网——每日最新资讯28at.com

而我们之前编译的Go的main函数测试二进制文件main。仍然能启动。vmz28资讯网——每日最新资讯28at.com

那么Go语言是如何独步江湖的呢?可以推断,Go的链接方式不使用ld-linux.so。vmz28资讯网——每日最新资讯28at.com

Go的编译器生成的静态链接的GO应用二进制文件,已包含了可供完整载入内存和需要的所有指令。既然这样,不管是Linux发行版A还是B系统自带的glibC 的版本是否过时,是否过新,跟GO能否正常运行关系不大。GO软件运行所需的都已经自给自足了。也因此Go可以带着它的干粮,不管丢到哪里就可以在那里运行。vmz28资讯网——每日最新资讯28at.com

当然,这离不开Go语言开发团队背后做了很多底层适配兼容,帮应用开发者省去了这份操心。也让这门语言兑现了它所吹过的牛。vmz28资讯网——每日最新资讯28at.com

下图为Golang 最新版1.21.5所支持的CPU架构、操作系统信息,实际Go目前能支持的已经超过这些平台范围。部分小众的系统架构也支持,图中未列出。vmz28资讯网——每日最新资讯28at.com

vmz28资讯网——每日最新资讯28at.com

vmz28资讯网——每日最新资讯28at.com

vmz28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-50029-0.html为什么Golang开发的软件单文件直接丢到各种Linux系统就能运行?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 掌握Python的高级用法:技巧、技术和实用性示例

下一篇: 一文搞懂Go中select的随机公平策略:并发编程的黄金法则

标签:
  • 热门焦点
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了——贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top