【发布时间】:2017-11-03 08:46:19
【问题描述】:
我添加了 AddressSanitizer 标志如下:
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
使用Unix Makefiles 时,一切都可以正常构建和运行。
生成 Xcode 项目时出现问题,它只是不想链接,因为它找不到 ASan 库。
我已经找到了两个解决方案,但决定不使用它们,因为它们不能仅使用 CMake 实现自动化:
- 将
-Wl,-undefined,dynamic_lookup添加到链接标志,因此它跳过链接到动态库。 - 直接链接
libclang_rt.asan_osx_dynamic.dylib。
那么这两种解决方案有什么问题呢?
- 使用解决方案#1时,我必须在Xcode中手动打开目标方案并添加指向
libclang_rt.asan_osx_dynamic.dylib的DYLD_INSERT_LIBRARIES环境变量。 - 使用解决方案 #2 时,ASan 库的路径因计算机而异。
另外,作为另一种解决方案,我尝试从 Xcode 目标方案中启用 Address Sanitizer 标志,但有趣的是它没有检测到我添加的问题,因此我没有将其列为解决方案,因为它未能通过我的测试。
任何帮助将不胜感激。
【问题讨论】:
-
也许可以看看这个:github.com/arsenm/sanitizers-cmake
-
如果您知道 Xcode 项目设置可以打开您想要的内容,您可以通过填充
CMAKE_XCODE_ATTRIBUTE_...变量或使用每个目标属性XCODE_ATTRIBUTE_...从 CMake 进行设置。
标签: c++ cmake clang address-sanitizer