m4pro ,用 GCC 编译出来一个 hellworld 的程序,用 orbstack 开的 ubuntu armlinux ,里面执行这个二进制程序也能成功出来 hellworld ,反过来不行,会提示格式错误,这是什么原理
1
guanzhangzhang 1 天前
加上静态编译相关参数后试试
|
2
Reficul 1 天前
file 一下看看 elf 文件的目标架构
|
3
heimeil 1 天前 3
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. |
4
nutting OP 看来这是 orbstack 提供的特性?容器里的 tomcat 提示的 JRE 也是 mac 下的,虽然运行没问题,感觉怪怪的
|
6
nutting OP @guanzhangzhang mac 下加 -static?报错了 ld: library not found for -lcrt0.o ,不是干这行的不太懂。linux 可以
|
7
licolicoli 1 天前 1
@nutting Linux 内核支持一个叫做 binfmt_misc 的功能,能根据识别不同的二进制可执行文件,并采取不同的方式(解析器)运行。交叉编译的时候挺有用的,你可以直接用 qemu 之类的模拟器跨架构(在 x86 上跑 arm64 程序)运行可执行文件,就像原生程序一样。不过模拟器带来的损耗还是有的。
|
8
virusdefender 1 天前
orbstack 自带转译,比如你 docker run --platform linux/amd64 的镜像也是可以的
|
9
wnpllrzodiac 7 小时 42 分钟前 via Android
qemu 万能的套子。最近在折腾 macos 运行 arm based 容器,交叉编译 x64 程序。不然用 x64 镜像 gcc 太慢了
|