我已经按照如下方式添加了 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标志,但有趣的是它没有检测到我添加的问题,因此我没有将其列为解决方案,因为它未通过我的测试。
任何帮助将不胜感激。
CMAKE_XCODE_ATTRIBUTE_...
变量或使用每个目标属性XCODE_ATTRIBUTE_...
来从CMake中设置它。 - Craig Scott