NDK升级后x86构建报__stack_chk_fail_local未定义的解决过程
解决NDK 22版本下Android x86构建出现
__stack_chk_fail_local未定义符号的问题 问题场景
NDK升级至22版本后,Android应用的x86构建出现如下错误:
undefined hidden symbol: __stack_chk_fail_local
常见解决方案为退回NDK 21版本,或在构建配置中添加-fno-stack-protector到cFlags。但此前为规避该问题移除了x86构建后,老Chromebook用户反馈ARM模拟导致应用崩溃,甚至Crashlytics也因模拟崩溃抛出错误:
"armeabi-v7a/libcrashlytics-handler.so" has unexpected e_machine: 40 (EM_ARM)
无法正常获取崩溃报告,因此必须恢复x86架构支持并使用最新NDK版本。
尝试过的无效方案
在build.gradle的android.defaultConfig块中添加如下配置:
externalNativeBuild.cmake.cFlags "-fno-stack-protector"
但查看实际执行的构建命令行发现,系统默认的-fstack-protector-strong仍被添加在参数开头,自定义的-fno-stack-protector排在末尾,无法覆盖原有栈保护设置,问题未解决。
最终有效解决方案
经排查,问题根源在于项目中预构建的libxml2库启用了栈保护机制,依赖__stack_chk_fail_local方法。重新编译该libxml2库,并在编译时添加-fno-stack-protector编译参数后,问题彻底解决。
内容的提问来源于stack exchange,提问作者Darren Taft
相关产品推荐
相关产品推荐

