可以一次编译处处运行的 Cosmopolitan Libc

2022-08-31 20:54:55 +08:00
 hsfzxjy

分享最近看到的一个神奇的东西。

cosmo libc 是一个实验性质的 C 库,可以做到代码编译一次即在 6 个操作系统上运行。( Linux, Mac OS X, Windows NT, FreeBSD, OpenBSD, and NetBSD )

注意这里说的是“一次编译,处处运行”,不是“一次编写,处处编译”,也不依赖额外的运行时。

其编译的产物是单个 APE 格式的文件。APE (αcτµαlly pδrταblε εxεcµταblε)是一个其自创的文件格式。这种格式同时是以上 6 个操作系统中合法的可执行文件格式,从而可以做到一次编译处处运行。

另外还看到有人用 cosmo libc 把 CPython 重新编译了一遍( https://ahgamut.github.io/2021/07/13/ape-python/ )。性能和功能完整性上有些许不足,但还是很震撼的。

2493 次点击
所在节点    分享发现
8 条回复
codehz
2022-08-31 21:03:45 +08:00
cosmopolitan 已经自带 python 啦,不需要用第三方的(
现在也支持用 c++库了
但是用第三方库得自己改造源码)
所以实用性不是很强,但是很好玩
hsfzxjy
2022-08-31 21:10:01 +08:00
@codehz 确实,刚看到了
seakingii
2022-08-31 22:42:24 +08:00
真的很神奇!我刚用官方的例子测试了 hello,同一个二进制文件,可以在 ubuntu 和 windows 10 下正确运行...

不过在 ubuntu 的 zsh 下不能运行,官方说明要用 bash -c './hello.com'
Tink
2022-08-31 23:05:45 +08:00
这个编译出来尺寸会很大么?
hsfzxjy
2022-09-01 01:19:47 +08:00
@Tink 不是很大,他的 hello world 只有 12kb https://justine.lol/cosmopolitan/howfat.html

对于更复杂的程序,如果只是用到了 POSIX 接口,我的理解是不需要额外的抽象层适配各个系统,因此编译出来的体积也不会大;如果用到了某个系统独有的特性,则需要把各个系统对应的接口代码打包进去,体积会相应增大。
seakingii
2022-09-01 01:44:35 +08:00
@Tink 我按官方代码,在 ubuntu 上编译出来 100K
wslzy007
2022-09-02 09:28:51 +08:00
现阶段意义不是很大,谈几点吧:
1 、交叉编译环境任然是必须的,跨系统,但无法跨 cpu 架构
2 、复杂的项目往往依赖很多三方模块,要么 allinone ,要么接受可能的罢工
3 、话说 musl 库也能做到同架构同平台一处编译,至少可以从系统角度做减法
最后,我想说的是:这或许是个重要方向,但需要形成标准且被各系统厂商广泛支持才能真正发挥效用
mayli
2022-09-07 06:52:00 +08:00
项目发起人还是个妹子!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876822

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX