分享最近看到的一个神奇的东西。
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/ )。性能和功能完整性上有些许不足,但还是很震撼的。
1
codehz 2022-08-31 21:03:45 +08:00
cosmopolitan 已经自带 python 啦,不需要用第三方的(
现在也支持用 c++库了 但是用第三方库得自己改造源码) 所以实用性不是很强,但是很好玩 |
3
seakingii 2022-08-31 22:42:24 +08:00
真的很神奇!我刚用官方的例子测试了 hello,同一个二进制文件,可以在 ubuntu 和 windows 10 下正确运行...
不过在 ubuntu 的 zsh 下不能运行,官方说明要用 bash -c './hello.com' |
4
Tink 2022-08-31 23:05:45 +08:00 via Android
这个编译出来尺寸会很大么?
|
5
hsfzxjy OP @Tink 不是很大,他的 hello world 只有 12kb https://justine.lol/cosmopolitan/howfat.html
对于更复杂的程序,如果只是用到了 POSIX 接口,我的理解是不需要额外的抽象层适配各个系统,因此编译出来的体积也不会大;如果用到了某个系统独有的特性,则需要把各个系统对应的接口代码打包进去,体积会相应增大。 |
7
wslzy007 2022-09-02 09:28:51 +08:00
现阶段意义不是很大,谈几点吧:
1 、交叉编译环境任然是必须的,跨系统,但无法跨 cpu 架构 2 、复杂的项目往往依赖很多三方模块,要么 allinone ,要么接受可能的罢工 3 、话说 musl 库也能做到同架构同平台一处编译,至少可以从系统角度做减法 最后,我想说的是:这或许是个重要方向,但需要形成标准且被各系统厂商广泛支持才能真正发挥效用 |
8
mayli 2022-09-07 06:52:00 +08:00
项目发起人还是个妹子!
|