You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac系统C++程序加载错误:dyld无法识别load command 0x80000034

问题与解决:Mac低版本系统无法加载编译程序

问题描述

在Mac OS 13.4.1系统上用CMake编译的C++程序,在Mac OS 10.14.6的Intel Mac上运行时出现错误:

dyld: cannot load 'my_program' (load command 0x80000034 is unknown)

二进制文件依赖信息:

otool -L my_program
my_program:
        /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1500.65.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1319.100.3)

二进制文件关键加载命令详情:

otool -l my_program
# ... 省略非关键内容 ...
Load command 5
      cmd LC_DYLD_CHAINED_FIXUPS
  cmdsize 16
  dataoff 20594688
 datasize 25456
# ... 省略非关键内容 ...
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform 1
    minos 13.0
      sdk 13.3
   ntools 1
     tool 3
  version 857.1
# ... 省略非关键内容 ...

错误原因

  1. 不兼容的加载命令:错误中的load command 0x80000034对应LC_DYLD_CHAINED_FIXUPS,该命令是Mac OS 11.0(Big Sur)才引入的新链接格式,Mac OS 10.14.6(Mojave)的dyld完全不识别这个命令,导致加载失败。
  2. 最低系统版本设置过高:从LC_BUILD_VERSION信息可见,编译时指定了最低支持系统版本为minos 13.0,远高于用户的10.14.6,直接限制了程序在低版本系统上的运行。

解决方案

1. 调整CMake编译参数

在CMake配置阶段,设置最低支持的Mac OS版本为10.14:

cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 ..

或者在CMakeLists.txt中添加:

set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version")

2. 使用经典链接器模式

强制编译器使用旧的链接格式,避免生成新的加载命令:
在CMake中添加链接器参数:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-ld_classic")

或者编译时直接指定:

g++ -o my_program source.cpp -mmacosx-version-min=10.14 -Wl,-ld_classic

3. 验证依赖兼容性

当前链接的系统库均满足10.14.6的兼容性要求:

  • OpenCL框架在10.14上默认存在,兼容性版本1.0.0符合要求
  • libc++.1.dylib和libSystem.B.dylib的兼容性版本均为1.0.0,10.14系统自带版本可满足运行需求

内容的提问来源于stack exchange,提问作者Fractale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:19:51