apple 芯片 macOS Gcc 编译完, arm Linux 也能执行?

16 天前
 nutting

m4pro ,用 GCC 编译出来一个 hellworld 的程序,用 orbstack 开的 ubuntu armlinux ,里面执行这个二进制程序也能成功出来 hellworld ,反过来不行,会提示格式错误,这是什么原理

2197 次点击
所在节点    程序员
9 条回复
guanzhangzhang
16 天前
加上静态编译相关参数后试试
Reficul
15 天前
file 一下看看 elf 文件的目标架构
heimeil
15 天前
https://docs.orbstack.dev/machines/#macos-executables

Similar to WSL, you can also run macOS executables (Mach-O) from Linux using binfmt_misc, which can be useful for development.
nutting
15 天前
看来这是 orbstack 提供的特性?容器里的 tomcat 提示的 JRE 也是 mac 下的,虽然运行没问题,感觉怪怪的
nutting
15 天前
@Reficul Mach-O 64-bit arm64 executable
nutting
15 天前
@guanzhangzhang mac 下加 -static?报错了 ld: library not found for -lcrt0.o ,不是干这行的不太懂。linux 可以
licolicoli
15 天前
@nutting Linux 内核支持一个叫做 binfmt_misc 的功能,能根据识别不同的二进制可执行文件,并采取不同的方式(解析器)运行。交叉编译的时候挺有用的,你可以直接用 qemu 之类的模拟器跨架构(在 x86 上跑 arm64 程序)运行可执行文件,就像原生程序一样。不过模拟器带来的损耗还是有的。
virusdefender
15 天前
orbstack 自带转译,比如你 docker run --platform linux/amd64 的镜像也是可以的
wnpllrzodiac
15 天前
qemu 万能的套子。最近在折腾 macos 运行 arm based 容器,交叉编译 x64 程序。不然用 x64 镜像 gcc 太慢了

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

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

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

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

© 2021 V2EX