我正在尝试在Xcode中使用地址清理器,但我也使用ccache来加速我的构建。为此,我在 Xcode 项目级别设置了 CC
标志,以指向我存储在 ~/projects/support/cmake/ccache-clang
的脚本。脚本内容如下
#!/bin/sh
if type -p /usr/local/bin/ccache >/dev/null 2>&1; then
export CCACHE_CPP2=true
exec /usr/local/bin/ccache "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
else
exec "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
fi
因此达到了预期的效果(如果安装在开发人员的系统上,则使用 ccache(。这运作良好。
现在,当我们为给定方案打开地址清理器时,问题就来了。构建成功完成,但是当我们尝试运行时,我们最终会看到此错误:
Error: Check dependencies
Could not determine version of clang to find its Address Sanitizer library: ~/projects/support/cmake/ccache-clang
也许这是由于 Xcode 中的一些黑客实现,它试图解析编译器的路径以确定版本?
想知道如何修改我的脚本以允许地址清理器工作。当前的解决方法是在我们需要进行消毒工作时删除覆盖的CC
标志。
使用 Xcode 8.3.1
直接链接牙山库,而不是选中方案中的框。
链接器和编译器标志应包含以下内容。
-fsanitize=address -fno-omit-frame-pointer
如果找不到库,请找到通常位于
${CMAKE_LINKER}/../../lib/clang/version/lib/darwin/libclang_rt.asan_osx_dynamic.dylib
并将其添加到链接器标志。
- 在
- Xcode 中工作的 CMake 中启用地址清理器的正确方法是什么