• 请不要在回答技术问题时复制粘贴 AI 生成的内容
nutting
V2EX  ›  程序员

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

  •  
  •   nutting · Jan 9, 2025 · 3291 views
    This topic created in 489 days ago, the information mentioned may be changed or developed.

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

    9 replies    2025-01-10 09:33:13 +08:00
    guanzhangzhang
        1
    guanzhangzhang  
       Jan 9, 2025
    加上静态编译相关参数后试试
    Reficul
        2
    Reficul  
       Jan 9, 2025
    file 一下看看 elf 文件的目标架构
    heimeil
        3
    heimeil  
       Jan 9, 2025   ❤️ 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
       Jan 9, 2025
    看来这是 orbstack 提供的特性?容器里的 tomcat 提示的 JRE 也是 mac 下的,虽然运行没问题,感觉怪怪的
    nutting
        5
    nutting  
    OP
       Jan 9, 2025
    @Reficul Mach-O 64-bit arm64 executable
    nutting
        6
    nutting  
    OP
       Jan 9, 2025
    @guanzhangzhang mac 下加 -static?报错了 ld: library not found for -lcrt0.o ,不是干这行的不太懂。linux 可以
    licolicoli
        7
    licolicoli  
       Jan 9, 2025   ❤️ 1
    @nutting Linux 内核支持一个叫做 binfmt_misc 的功能,能根据识别不同的二进制可执行文件,并采取不同的方式(解析器)运行。交叉编译的时候挺有用的,你可以直接用 qemu 之类的模拟器跨架构(在 x86 上跑 arm64 程序)运行可执行文件,就像原生程序一样。不过模拟器带来的损耗还是有的。
    virusdefender
        8
    virusdefender  
       Jan 9, 2025
    orbstack 自带转译,比如你 docker run --platform linux/amd64 的镜像也是可以的
    wnpllrzodiac
        9
    wnpllrzodiac  
       Jan 10, 2025 via Android
    qemu 万能的套子。最近在折腾 macos 运行 arm based 容器,交叉编译 x64 程序。不然用 x64 镜像 gcc 太慢了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5512 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 05:47 · PVG 13:47 · LAX 22:47 · JFK 01:47
    ♥ Do have faith in what you're doing.