为何arm-linux-gcc与aarch64-linux-gcc工具链不支持Sanitizers?
原因分析
- 交叉工具链默认未包含Sanitizers支持:你使用的ARM/aarch64交叉编译工具链(包括Xilinx的
arm-xilinx-linux-gnueabi和通用aarch64-linux-gnu),为适配嵌入式设备有限的资源,默认不会编译ASAN这类Sanitizer的运行时库(libasan.so)。Sanitizers会大幅增加二进制体积并带来性能开销,不符合多数嵌入式场景的需求,所以工具链构建时默认关闭了该功能。 - 工具链构建时未开启Sanitizers编译选项:构建GNU交叉工具链时,必须显式添加
--enable-sanitizers这类配置参数,才会编译ASAN、UBSAN等Sanitizer的支持库。如果工具链的构建者没有设置这个选项,链接阶段自然找不到-lasan对应的库文件。 - 嵌入式系统的硬件/软件限制:像ASAN这类Sanitizer对运行环境有要求,比如需要足够的内存、动态链接器的配合,以及Linux内核的特定内存管理特性。很多低配置的ARM嵌入式设备无法满足这些条件,工具链开发者也就默认不提供该支持,避免冗余功能占用空间。
内容的提问来源于stack exchange,提问作者Caglayan Dokme
相关产品推荐
相关产品推荐

