【问题标题】:How to Use AddressSanitizer on Android NDK GCC?如何在 Android NDK GCC 上使用 AddressSanitizer?
【发布时间】:2023-03-27 12:38:01
【问题描述】:

我想使用 AddressSanitizer 检查使用 GCC 4.9 编译的 Android Native C++ 代码中的内存问题。

所以,我设置了

SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -g1 -fsanitize=address -fno-omit-frame-pointer")
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g1 -fsanitize=address -fno-omit-frame-pointer")
SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address -static-libasan")

在我的 CMakeLists.txt 文件中。

但我得到了一个错误:

ld.exe: 错误: 找不到 -lasan", 我在 NDK 目录中找到了, 我没有 找到 libasan.so

NDK GCC 与 NDK Clang 有什么不同?在 NDK 中,是否只是 Clan 支持 AddressSanitizer?

【问题讨论】:

  • “只是 Clang 支持 AddressSanitizer?” 是:“作为构建 ASan 检测二进制文件的第一步,请确保您的代码使用 Clang 构建”。无论如何,GCC 在 NDK 中已经被弃用了一段时间,并且在 NDK r18 中被完全删除。

标签: c++ gcc android-ndk address-sanitizer


【解决方案1】:

您不能在 NDK 中将 ASAN 与 GCC 一起使用。这些库从未发货。 Clang 支持 ASAN,而当前的 NDK根本不支持 GCC。

NDK GCC 与 NDK Clang 有什么不同吗?

就像非 NDK GCC 与非 NDK Clang 一样,是的。它们是不同的编译器。

【讨论】:

猜你喜欢
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 2017-05-11
  • 2020-01-18
  • 2019-11-08
  • 2012-08-09
  • 1970-01-01
相关资源
最近更新 更多