Cosmopolitan:一次构建,多平台原生运行的C语言库行!

news2024/11/26 8:30:33

Cosmopolitan:C语言的跨平台革命,无需虚拟机,直接运行于任何环境。- 精选真开源,释放新价值。

image

概览

Cosmopolitan是一个创新的C语言库,旨在实现C程序的"一次编写,多处运行",类似于Java的跨平台特性,但无需依赖解释器或虚拟机。它通过重新配置标准的GCC和Clang编译器,输出符合POSIX标准的多语言格式,确保程序能够在Linux、Mac、Windows、FreeBSD、OpenBSD、NetBSD以及BIOS等平台上以最佳性能和最小化资源占用运行。


主要功能

你可以从以下连接获取编译器:https://cosmo.zip/pub/cosmocc

mkdir -p cosmocc
cd cosmocc
wget https://cosmo.zip/pub/cosmocc/cosmocc.zip
unzip cosmocc.zip

以下是编写的示例程序:

// hello.c
#include <stdio.h>

int main() {
  printf("hello world\n");
}

可以按如下方式编译:

cosmocc -o hello hello.c
./hello
  • 跨平台兼容性

Cosmopolitan通过重构GCC和Clang编译器,生成符合POSIX标准的代码,确保C程序在Linux、Mac、Windows、FreeBSD、OpenBSD、NetBSD以及BIOS等操作系统上无需额外修改即可运行。这种跨平台的能力减少了为不同操作系统编写和维护特定代码的工作量,简化了开发流程。

  • 高性能

Cosmopolitan专注于生成高效的本地代码,通过优化编译器的输出,减少运行时开销,从而在各种平台上实现接近原生应用的性能。它避免了解释器或虚拟机带来的性能损耗,让C程序能够直接与操作系统交互,充分利用硬件资源。

  • 最小化资源占用

Cosmopolitan生成的二进制文件大小极小,例如,通过特定的构建模式,可以生成仅有12KB大小的程序。这种轻量级的特性使得程序部署更加便捷,尤其适合资源受限的环境或需要快速分发的场景。

  • 丰富的工具链

Cosmopolitan提供了cosmocc编译器,以及用于日志记录、调试和其他开发任务的工具。这些工具帮助开发者在编写、编译和运行程序时更加高效,同时简化了问题诊断和性能调优的过程。

  • 系统调用日志

Cosmopolitan内置了系统调用和函数调用的日志记录功能,允许开发者通过简单的命令行参数激活日志记录。这些日志对于理解程序的行为、定位问题和分析性能至关重要,提高了开发和维护的效率。

Cosmopolitan Libc 运行时默认链接了一些重量级的故障排除功能,这些功能对开发人员和管理员非常有用。以下是记录系统调用的方法:

./hello --strace
./hello --ftrace
  • 自定义构建模式

Cosmopolitan支持多种构建配置,允许开发者根据应用的需求选择不同的优化级别和功能集。例如,可以选择生成极小化的二进制文件,或者定制特定操作系统的优化,从而在保持程序性能的同时,减少资源消耗。

export CC=x86_64-unknown-cosmo-cc
export CXX=x86_64-unknown-cosmo-c++
./configure --prefix=/opt/cosmos/x86_64
make -j
make install

信息

截至发稿概况如下:

  • 软件地址:https://github.com/jart/cosmopolitan

  • 软件协议:ISC

  • 编程语言

语言占比
C62.0%
POV-Ray SDL24.2%
Assembly5.2%
Lua4.2%
Shell1.6%
Makefile1.2%
Other1.6%
  • 收藏数量:15.6K

Cosmopolitan项目为C语言开发者提供了一个强大的工具,使得他们能够更轻松地创建跨平台的应用程序。然而,跨平台开发也带来了一些挑战,例如不同平台间的API差异和性能优化问题。开发者可能需要对特定平台进行额外的适配工作,并在性能和兼容性之间找到平衡。此外,由于Cosmopolitan是一个相对较新的项目,社区支持和文档可能不如一些成熟的项目完善。为了解决这些问题,项目团队鼓励开发者参与到社区中来,共同贡献代码、分享经验和改进文档,以促进项目的成熟和稳定发展。

各位在使用 Cosmopolitan 的过程中是否发现了什么问题?或者对 Cosmopolitan 的功能有什么提议?热烈欢迎各位在评论区分享交流心得与见解!!!


声明:本文为辣码甄源原创,转载请标注"辣码甄源原创首发"并附带原文链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习驱动流体力学】配置安装 OpenFOAM 及其所需的ThirdParty-10与QT5工具

本文以ThirdParty-10 为例,ThirdParty-10 是 OpenFOAM 软件包中的一个重要组件目录&#xff0c;包含了一系列外部的第三方库和工具&#xff0c;这些库和工具对于 OpenFOAM 的编译和运行至关重要。该目录提供了各种脚本和配置文件&#xff0c;用于简化这些第三方库的下载、编译和…

文生视频开源产品的一些调研(一)

笔者尝试AI视频生成的几个特点&#xff1a; 玄学prompt&#xff0c;每个视频的prompt可能也需要微调很多次&#xff0c;需要找到使用模型的最佳prompt词组合&#xff0c;不恰当的比喻&#xff0c;骑自行车&#xff0c;座位高度等都是人与车彼此熟悉玄学生成&#xff0c;因为需…

Ubuntu与RedHat Linux的不同

部署Ubuntu 安装在服务器上的系统一般追求极致的稳定&#xff0c;所以安装系统时为了避免潜在的问题&#xff0c;所以选的时候应该往后推选几个版本 首先因为现在使用的电脑是MacBook&#xff0c;还是最新的Mac所以在部署的时候要注意其安装的支持芯片架构&#xff08;最新的…

Gitlab SSH无法连接但是HTTP可以连接

项目场景&#xff1a; Gitlab在docker中布置好之后测试&#xff0c;发现SSH无法连接但是HTTP可以连接 提示&#xff1a;这是一个无效的源路径 问题描述 http可以识别为git项目&#xff0c;而ssh无法识别成git项目。 原因分析&#xff1a; 三种猜想 端口号被占用 尝试查看…

UE5开发游戏Tutorial

文章目录 PlayerStart 初始化设置默认 LevelBP_Character 初始化BP_Character 添加动画BP_Character 攻击BP_Enemy 初始化 以及 AI 运动Camera Collision 相机碰撞BP_Character 生命以及伤害Wave Spawner 波生成UI 初始化以及 Damage Screen指定位置随机生成添加声音环境 Envir…

Apache Doris 全新分区策略 Auto Partition 应用场景与功能详解 | Deep Dive系列

编辑&#xff1a;SelectDB 技术团队 在当今数据驱动的时代&#xff0c;如何高效、有序地管理数据库中的海量数据成为挑战。为了处理庞大的数据集&#xff0c;分布式数据库引入了类似分区和分桶策略&#xff0c;通过将数据按特定规则划分成较小的单位并分布到不同节点上&#x…

Azure创建虚拟机

Azure创建虚拟机 一、创建步骤(1)登录到Azure portal(2)启动新实例(3)填写必要信息选择系统镜像(4)选择实例类型(5)配置管理员帐户和入站端口规则(6) 磁盘:保持默认(7) 网络:保持默认(8) 管理:保持默认(9) Monitoring:Boot diagnostics选择Disable(10) 最后直接点击查看 + …

2024年第三届数据统计与分析竞赛(A题)数学建模完整思路+完整代码全解全析

本次A题主要涉及正态分布、数据处理、自然语言处理等知识点 问题一题目重述&#xff1a;根据附件中抖音用户的评论数据&#xff0c;对抖音 APP 的“评分”和“点赞数”进行数据统计与分析&#xff0c;并使用假设检验判断这两个指标的分布是否服从正态分布。 接下来对问题一进…

深度学习工具jupyter的new没有环境选项以及遇到的EnvironmentLocationNotFound:Not such a environment

jupyter安装使用 安装完Anaconda&#xff08;安装Anaconda具体请参考其他教程&#xff09;后&#xff0c;一般默认有安装jupyter打开 注意当前是base环境&#xff0c;后期使用jupyter需要切换环境 我们找到文件地址。用记事本打开 可以搜索&#xff1a;c.NotebookApp.noteb…

redis持久化方式—AOF

redis为什么需要持久化 redis是内存数据库&#xff0c;redis所有的数据都保存在内存中 如果此时pc关机或重启&#xff0c;那么内存中的用户数据岂不是丢失了&#xff1f;redis这么不安全吗&#xff1f; 作为数据库&#xff0c;保证数据的安全&#xff0c;持久是基本需求&…

RERCS系统开发实战案例-Part05 FPM Application的Feeder Class搜索组件的实施

1、通过事务码 SE24对Feeder Class实施 1&#xff09;接口页签的简单说明&#xff1a; ① IF_FPM_GUIBB&#xff1a;通用UI构建块&#xff0c;整个UIBB模块的基础接口&#xff1b; ② IF_FPM_GUIBB_SEARCH&#xff1a;通用搜索UI构建块&#xff0c;搜索组件UIBB的基础接口&…

操作系统入门 -- CPU调度算法

操作系统入门 – CPU调度算法 在了解完进程和线程的概念后&#xff0c;我们就需要了解当一个进程就绪后系统会进行怎样的资源分配并运行进程&#xff0c;因此我们就需要了解CPU的调度算法 1.CPU调度 1.1概念 CPU调度即按照某种算法将CPU资源分配给某个就绪的进程。 1.2调度…

外链是否会增加流量?

外链确实可以间接地帮助增加网站流量&#xff0c;不过要了解的是这不是直接影响&#xff0c;首先&#xff0c;外链主要是提升你的网站在搜索引擎中的整体权重。简单地说&#xff0c;当你的网站被很多其他的网站通过dofollow链接指向时&#xff0c;搜索引擎会认为你的网站内容质…

TCP三次握手和四次挥手过程简介(抓包分析,简单易懂,小白)

接上篇 传输层部分 链路层、网络层、传输层和应用层协议详解分析-CSDN博客文章浏览阅读689次&#xff0c;点赞10次&#xff0c;收藏15次。wireshark抓包分析-CSDN博客wireshark是网络包分析工具网络包分析工具的主要作用是尝试捕获网络包&#xff0c;并尝试显示包的尽可能详细…

SQL Server数据库安装

原文&#xff1a;https://blog.c12th.cn/archives/26.html SQL Server数据库安装 测试&#xff1a;笔记本原装操作系统&#xff1a;Windows 10 家庭中文版 资源分享链接&#xff1a;提取码&#xff1a;qbt2 注意事项&#xff1a; 请严格按照步骤安装&#xff0c;SQL软件安装较…

单片机 PWM输入捕获【学习记录】

前言 学习是永无止境的&#xff0c;就算之前学过的东西再次学习一遍也能狗学习到很多东西&#xff0c;输入捕获很早之前就用过了&#xff0c;但是仅仅是照搬例程没有去进行理解。温故而知新&#xff01; 定时器 定时器简介 定时器的分类 高级定时器 通用定时器 基本定时器…

用TensorRT-LLM进行LLama的推理和部署

Deploy an AI Coding Assistant with NVIDIA TensorRT-LLM and NVIDIA Triton | NVIDIA Technical BlogQuick Start Guide — tensorrt_llm documentation (nvidia.github.io) 使用TensorRT-LLM的源码&#xff0c;来下载docker并在docker里编译TensorRT-LLM&#xff1b; 模型…

LabVIEW回热系统热经济性分析及故障诊断

开发了一种利用LabVIEW软件的电厂回热系统热经济性分析和故障诊断系统。该系统针对火电厂回热加热器进行优化&#xff0c;通过实时数据监控与分析&#xff0c;有效提高机组的经济性和安全性&#xff0c;同时降低能耗和维护成本。系统的实施大幅提升了火电厂运行的效率和可靠性&…

【调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布】

调试笔记-系列文章目录 调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布 文章目录 调试笔记-系列文章目录调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试…

CSS-0_2 CSS和继承(inherit initial)

文章目录 CSS的层叠和继承inheritinitial很多你以为的样式初始值&#xff0c;其实是用户代理样式 碎碎念 CSS的层叠和继承 在上一篇 CSS和层叠、样式优先级 里已经讲过了层叠和优先级之间的关系&#xff0c;但是在CSS中的层叠除了体现在争抢露脸机会的优先级之外&#xff0c;还…