通过定义一个内核接口层 OpenKAL,实现了 C++通用交叉编译/构建,可以在 Windows 上交叉编译 Linux 和 macos 程序 (其实更通用 在任意 OS 交叉构建到任意 OS 程序)

2 天前
 Sunrisepeak

注: 任意是指在 macos/windows/linux 任意一个 交叉编译到 macos/windows/linux


1021 次点击
所在节点    程序员
8 条回复
coefu
2 天前
依赖的底层库都不同,任意对任意,你怎么交叉编译得成功,标题有点过了,还是要标明约束条件的。
xinyu391
2 天前
llvm 不就支持的吗?
干嘛还要搞个内核接口?
SmiteChow
1 天前
zig 挑战我的编译器?
Sunrisepeak
1 天前
@coefu 就是可以啊, 屏蔽了底层库区别,走统一 ABI openkal ,编译期自动分发
Sunrisepeak
1 天前
@xinyu391 llvm 设计上就是多指令集后端,但是各种原因 通用交叉编译是用不了的。即在 linux 构建出可以用标准库的 macos / windows / linux 程序 现实好像没有人做这块,只有 mingw 做了 linux -> windows 是比较常用的,但目前 mcpp + openkal 体系 做到了 3 x 3 任意交叉构建 直接覆盖了 mingw 的功能范围 (当然目前是 MVP 初步验证通过,稳定性等一些方面肯定不能和 mingw 比
Sunrisepeak
1 天前
@SmiteChow 目前 mcpp 的方式是 把 kernel abi / c abi / c++ abi 变成编译期确定 可组合,和 编译器核心 解耦,和 zig 方式 可能稍微有点区别
xinyu391
1 天前
感觉就是个跨平台接口的 C 库,
别笑我,我外行。
Sunrisepeak
21 小时 39 分钟前
@xinyu391 他本身不是库,只是接口规范没有任何实现。具体实现在 backend, 而 backend 你可以直接是内核或对系统调用封装的 C ,openkal 不关心实现方式 只做接口规范和标准。

这是 openkal 的 linux 实现, 直接走系统调用, 而 C 语言只是方便使用的工具

- https://github.com/mcpplibs/openkal-linux/blob/main/src/sys.h

但其实 openkal 不关心 是汇编或是其他。因为他是面向内核接口规范设计的一组 SPEC / 规约 / ABI, 即:

openkal: 是一组内核接口规范 (这个不是传统意义上的库)
openkal-linux: 是对这个内核接口规范的实现。(这个规范的具体实现以库形似表现, 也可以是内核)

只不过这个确实不太清楚怎么解释比较好, 核心就是理解 规范 和 具体的库的区别。

当然概念上有个类似的东西叫 posix, 你可以了解一下

(当然你我上面这段话复制给 AI 和他多轮对话辅助理解)

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

https://v2ex.ih06.com/t/1236919

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

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

© 2021 V2EX