You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用GCC AddressSanitizer后运行时出现swift_demangle符号未找到错误

启用GCC AddressSanitizer后运行时提示找不到swift_demangle符号的问题

我在OpenWRT构建环境中使用GCC 7.5.0交叉编译程序,添加-fsanitize=address选项来排查内存泄漏问题。交叉编译过程无异常,但在目标环境运行可执行文件时,出现symbol not found错误,具体提示为get cfg_loadRemoteCfgs fail:Symbol not found: swift_demangle。

环境信息

GCC版本详情:

aarch64-openwrt-linux-musl-gcc (OpenWrt GCC 7.5.0 r11-afafb2b1c) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.

C库:MUSL libc

编译配置修改

CMake编译参数修改:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -g -Wall --std=gnu99 -fsanitize=address -fno-omit-frame-pointer")

依赖添加:

NUSPD_DEPENDS := +libuci +libubox +libubus +libblobmsg-json +cfgmgr +libjson-c libixml +libcurl +idl2json +obj2json +libasan

运行报错及依赖检查

root@Bean10:/home/superadmin# Nuspd  
**get cfg_loadRemoteCfgs fail:Symbol not found: swift_demangle**

root@Bean10:/home/superadmin# ldd --list /sbin/Nuspd | grep -i asan  
        libasan.so.4 => /usr/lib/libasan.so.4 (0x7f7fcc8000) 

root@Bean10:/home/superadmin# ls /usr/lib/libasan.so* -lh  
lrwxrwxrwx    1 root     root          16 Jun 27 17:44 /usr/lib/libasan.so -> libasan.so.4.0.0  
lrwxrwxrwx    1 root     root          16 Jun 27 17:44 /usr/lib/libasan.so.4 -> libasan.so.4.0.0  
-rwxr-xr-x    1 root     root      905.7K Jun 27 17:44 /usr/lib/libasan.so.4.0.0  

注:cfg_loadRemoteCfgs符号属于程序已链接的libcfg.so共享库

strace输出片段

--- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPC, si_addr=0x7fb962f690} ---
rt_sigprocmask(SIG_SETMASK, ~[ILL TRAP BUS FPE KILL SEGV STOP RTMIN RT_1 RT_2], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, NULL, ~[ILL TRAP BUS FPE KILL SEGV STOP RTMIN RT_1 RT_2], 8) = 0
rt_sigaction(SIGILL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fbad42e90}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb6200000
munmap(0x7fb6300000, 1048576)           = 0
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb6000000
munmap(0x7fb6100000, 1048576)           = 0
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb5e00000
munmap(0x7fb5f00000, 1048576)           = 0
writev(2, [{iov_base="get cfg_loadRemoteCfgs fail:Symb"..., iov_len=61}, {iov_base=NULL, iov_len=0}], 2get cfg_loadRemoteCfgs fail:Symbol not found: swift_demangle
) = 61  

ASAN/LSAN详细日志输出

root@Bean10:/home/superadmin# LSAN_OPTIONS=verbosity=1:log_threads=1 Nuspd
==10901==LeakSanitizer: Dynamic linker not found. TLS will not be handled correctly.
==10901==AddressSanitizer Init done
get cfg_loadRemoteCfgs fail:Symbol not found: swift_demangle
==10902==Processing thread 10901.
==10902==Stack at 0x007ff5a57000-0x007ff6257000 (SP = 0x007ff6255fc0).
==10902==TLS at 0x000000000000-0x000000000000. 

我想了解为何启用GCC AddressSanitizer选项后,运行时链接器无法找到swift_demangle这个符号。


内容的提问来源于stack exchange,提问作者renga_in_stack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:22:08