MacOS - clang 地址清理程序无法链接

ise*_*ale 6 macos cmake clang linker-errors address-sanitizer

我一直在尝试使用 Clang 的地址代码清理器,但链接器没有它。链接器可能是“ld”,尽管我的 CMAKE 设置向我保证 clang 是链接器。

添加-fsanitize=address到编译器和链接器标志。

错误:

Undefined symbols for architecture x86_64:
___asan_after_dynamic_init
...
___asan_before_dynamic_init
...
etc.
ld: symbol(s) not found for architecture x86_64    <<<< **suspicious**
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
  • 环境:MacOS
  • clang:Apple LLVM 版本 8.0.0 (clang-800.0.38)
  • cmake:3.7.1

  • CMAKE_CXX_COMPILER = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++(重定向到clang)

  • CMAKE_CXX_COMPILER_ID = Clang
  • 编译器标志:-O0 -g -fsanitize=address
  • CMAKE_LINKER = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++(重定向到 clang)
  • CMAKE_CXX_LINK_EXECUTABLE = CMAKE_CXX_COMPILER 标志 CMAKE_CXX_LINK_FLAGS LINK_FLAGS 对象 -o 目标 LINK_LIBRARIES
  • CMAKE_CXX_LINK_FLAGS = -Wl,-search_paths_first -Wl ,-headerpad_max_install_names -fsanitize=address -v

小智 5

这里解决

将 -fsanitize=address 标志传递给链接器和编译器。

-DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address"

  • 只是一个注释。我花了好几个小时才弄清楚这一点。尽管示例中明确提到了这一点 - https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build。在 cmake 中设置标志的优雅解决方案将是: *string(APPEND CMAKE_EXE_LINKER_FLAGS "-fsanitize=address")* (3认同)