V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
nutting
V2EX  ›  程序员

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

  •  
  •   nutting · 18 小时 49 分钟前 · 1617 次点击

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

    8 条回复    2025-01-09 14:12:15 +08:00
    guanzhangzhang
        1
    guanzhangzhang  
       18 小时 44 分钟前
    加上静态编译相关参数后试试
    Reficul
        2
    Reficul  
       18 小时 20 分钟前
    file 一下看看 elf 文件的目标架构
    heimeil
        3
    heimeil  
       18 小时 15 分钟前   ❤️ 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.
    nutting
        4
    nutting  
    OP
       18 小时 6 分钟前
    看来这是 orbstack 提供的特性?容器里的 tomcat 提示的 JRE 也是 mac 下的,虽然运行没问题,感觉怪怪的
    nutting
        5
    nutting  
    OP
       18 小时 2 分钟前
    @Reficul Mach-O 64-bit arm64 executable
    nutting
        6
    nutting  
    OP
       17 小时 57 分钟前
    @guanzhangzhang mac 下加 -static?报错了 ld: library not found for -lcrt0.o ,不是干这行的不太懂。linux 可以
    licolicoli
        7
    licolicoli  
       15 小时 46 分钟前
    @nutting Linux 内核支持一个叫做 binfmt_misc 的功能,能根据识别不同的二进制可执行文件,并采取不同的方式(解析器)运行。交叉编译的时候挺有用的,你可以直接用 qemu 之类的模拟器跨架构(在 x86 上跑 arm64 程序)运行可执行文件,就像原生程序一样。不过模拟器带来的损耗还是有的。
    virusdefender
        8
    virusdefender  
       14 小时 13 分钟前
    orbstack 自带转译,比如你 docker run --platform linux/amd64 的镜像也是可以的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 20:26 · PVG 04:26 · LAX 12:26 · JFK 15:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.