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

MacOS Sonoma(M1 Pro)下sudo make install安装Z3后动态库加载失败

解决MacOS Sonoma(M1 Pro)上Z3动态库加载错误的优雅方案

问题背景

通过源码执行sudo make install安装Z3后,编译示例或自定义程序成功,但运行时出现动态库加载错误:

Library not loaded: libz3.dylib Referenced from: <856829F0-D35A-383B-8D63-7734D9099FC4> /my_path/cpp_example Reason: tried: 'libz3.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibz3.dylib' (no such file), 'libz3.dylib' (no such file), '/my_path/libz3.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS//my_path/libz3.dylib' (no such file), '/my_path/libz3.dylib' (no such file)

复制libz3.dylib到程序目录可临时解决,以下是更优雅的方案:

解决方案

1. 全局配置动态库搜索路径

  • 确认Z3库的安装路径,默认sudo make install会将libz3.dylib安装到/usr/local/lib
  • 打开终端,编辑zsh配置文件:
    nano ~/.zshrc
    
  • 添加以下内容:
    export DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH"
    
  • 保存后生效配置:
    source ~/.zshrc
    
  • 此方法全局生效,适合频繁使用Z3的场景

2. 编译时指定动态库搜索路径(推荐)

编译程序时,通过-rpath参数让生成的可执行文件自带库路径,无需依赖环境变量:

g++ cpp_example.cpp -o cpp_example -lz3 -Wl,-rpath,/usr/local/lib

替换/usr/local/lib为你的Z3实际库路径,编译后的程序会自动到指定路径加载libz3.dylib

3. 修复Z3安装的库路径

如果sudo make install未将库放到系统默认搜索目录:

  • 手动复制库到系统目录:
    sudo cp /path/to/z3/build/libz3.dylib /usr/local/lib
    
  • 更新系统动态库缓存:
    sudo update_dyld_shared_cache
    

4. 修改已编译程序的库引用路径

若已编译好程序不想重新编译,使用install_name_tool修改程序的库指向:

install_name_tool -change libz3.dylib /usr/local/lib/libz3.dylib ./cpp_example

执行后程序会直接去指定绝对路径加载动态库

原因说明

MacOS的动态库搜索优先级中,默认未将/usr/local/lib纳入自动搜索范围,而Z3的make install流程未自动为编译后的程序设置rpath,导致运行时无法定位库文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:32:47