macOS Sequoia下用gperftools+pprof分析C++代码遇动态库错误求助
解决macOS上pprof分析时动态库找不到的问题
方案1:替换pprof使用的otool版本
pprof默认调用的otool-classic适配性较差,换成Xcode命令行工具里的新版otool试试:
- 先设置环境变量指定新otool路径:
export PPROF_OTOOL=/Library/Developer/CommandLineTools/usr/bin/otool - 再重新运行pprof命令:
pprof -text test ~/prof.out
方案2:手动补全缺失的系统库符号链接
macOS的/usr/lib受系统完整性保护(SIP),部分库的符号链接可能丢失,你可以手动创建:
- 先找到缺失库的实际位置,比如找
libcharset.1.dylib:
通常路径是find /System/Library/Frameworks -name libcharset.1.dylib/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Libraries/libcharset.1.dylib - 关闭SIP(因为/usr/lib受保护,必须先关闭):
- 重启Mac,按住
Command+R进入恢复模式 - 打开终端执行:
csrutil disable - 重启系统
- 重启Mac,按住
- 创建符号链接:
sudo ln -s /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Libraries/libcharset.1.dylib /usr/lib/libcharset.1.dylib - 完成后记得重新启用SIP:重复步骤2,执行
csrutil enable后重启
方案3:用Homebrew重装适配macOS的版本
可能你当前的gperftools版本和系统不兼容,用Homebrew重新安装:
- 卸载旧版本:
brew uninstall gperftools - 重新安装gperftools:
brew install gperftools - 同时安装新版pprof(现在pprof属于Go工具链,装Go就能拿到):
brew install go - 用Homebrew提供的pprof运行分析:
$(brew --prefix)/bin/pprof -text test ~/prof.out
方案4:编译时静态链接减少动态依赖
编译代码时尝试静态链接部分库,降低动态库依赖问题:
g++ test.cpp -o test -static-libstdc++ -lprofiler
注意:macOS上部分系统库不支持静态链接,这个方法可能只解决部分场景。
内容的提问来源于stack exchange,提问作者Harith Laxman
相关产品推荐
相关产品推荐

