我添加了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
。那么这两种解决方案的问题是什么?
DYLD_INSERT_LIBRARIES
的libclang_rt.asan_osx_dynamic.dylib
环境变量。另外作为另一种解决方案,我尝试从Xcode目标方案启用Address Sanitizer标志,但有趣的是它没有检测到我添加的问题,因此我没有将其列为解决方案,因为它未通过我的测试。
任何帮助都感激不尽。
您还需要向链接器提供标志。我是这样做的:
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
cmake 3.13 介绍xcode schema的配置
在CMake
cmake_minimum_required(VERSION 3.13)
set(CMAKE_XCODE_GENERATE_SCHEME ON)
set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER ON)
set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN ON)
什么时候构建
xcodebuild -enableAddressSanitizer YES
我目前发现的最简单的解决方案是
cmake -DCMAKE_BUILD_TYPE=ASAN .
我更喜欢这个选项,因为它表达了意图(运行清理程序)而不是修改了许多标志。
我不知道何时添加了此选项。我也找不到任何文件。