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

macOS下CLion执行Valgrind提示Library not loaded: /usr/lib/libc++.1.dylib

问题现象

报错信息

在CLion中执行Valgrind内存检测时出现如下报错:

/usr/local/bin/valgrind --tool=memcheck --xml=yes --xml-file=/private/var/folders/gq/r_j6y6112zlccqkwxp0rj_v00000gn/T/clion-valgrind6333974d-afb4-4c0b-8c03-407df60789cf/valgrind_output_%p --gen-suppressions=all --leak-check=full --leak-resolution=med --track-origins=yes --vgdb=no /Users/hayashi-ay/Projects/tests/cmake-build-debug/main --gtest_filter=* --gtest_color=no
Testing started at 2:10 ...
dyld[8729]: Library not loaded: /usr/lib/libc++.1.dylib
  Referenced from: /Users/hayashi-ay/Projects/tests/cmake-build-debug
  Reason: tried: '/usr/lib/libc++.1.dylib' (no such file), '/usr/local/lib/libc++.1.dylib' (no such file)

依赖验证

查询main程序的动态库依赖如下,确认存在/usr/lib/libc++.1.dylib依赖项,且直接运行./main可以正常启动:

otool -L main
main:
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1200.3.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.0.0)

运行环境

  • 操作系统:macOS 12.0.1
    sw_vers
    ProductName:    macOS
    ProductVersion: 12.0.1
    BuildVersion:   21A559
    
  • Valgrind版本:3.18.0.GIT-lbmacos
    valgrind --version
    valgrind-3.18.0.GIT-lbmacos
    
  • CLion版本:2021.2.2
    CLion 2021.2.2
    Build #CL-212.5284.51, built on September 17, 2021
    Licensed to xxxxxxxxxxxxxx
    Subscription is active until October 6, 2022
    For educational use only.
    Runtime version: 11.0.12+7-b1504.28 x86_64
    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
    macOS 12.0.1
    GC: G1 Young Generation, G1 Old Generation
    Memory: 2000M
    Cores: 8
    Registry: run.processes.with.pty=TRUE
    Non-Bundled Plugins: com.intellij.plugins.vscodekeymap (212.3116.29)
    
根因说明

从macOS 11 Big Sur版本开始,苹果将系统内置的标准动态库全部移入了内核动态缓存,磁盘上不再保留/usr/lib/libc++.1.dylib这类实体文件。程序直接运行时系统会自动从缓存中加载对应的库,所以直接启动main程序没有问题。你所使用的Valgrind 3.18开发版本未适配macOS 12的新动态库机制,扫描依赖时只会去磁盘路径查找库文件,找不到就会抛出加载失败的报错。

解决方案
  1. 修改程序的动态库链接路径
    执行以下命令将main程序的libc++依赖指向Xcode SDK中的库文件:
    sudo install_name_tool -change /usr/lib/libc++.1.dylib $(xcrun --show-sdk-path)/usr/lib/libc++.1.dylib ./cmake-build-debug/main
    
    修改完成后即可正常使用Valgrind检测。
  2. 使用AddressSanitizer替代Valgrind
    这是macOS上更推荐的内存问题检测方案,CLion原生支持。只需要在CMake配置中添加编译选项:
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -g")
    
    重新编译后直接运行程序,就会自动检测内存泄漏、越界访问等问题,检测速度和兼容性都远优于macOS版本的Valgrind。
  3. 静态链接libc++
    编译时添加静态链接选项,避免依赖系统的动态libc++:
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libc++")
    
    编译生成的可执行文件就可以直接被Valgrind加载。

内容的提问来源于stack exchange,提问作者hayashi-ay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:27:04