目前Android O预览版4由于具有可写和可执行段而阻止加载某些本机库。他们通过扫描ELF来确定这一点。
我正在尝试为没有可写和可执行段的Android编译本机共享对象库。
对这种类型的低级编译不太熟悉,有人可以解释如何设置段与可写和可执行权限相互排斥吗?
我想我可能需要在我的Android.mk文件中添加一些特定的标志来防止这个问题,其他初步想法可能与用于编译的NDK工具链有关。
对于在哪里寻找任何帮助或建议表示赞赏。
答案 0 :(得分:3)
GNU工具链和Android工具链现在已经做了很长时间了。您可以在文章中使用readelf
/ grep
命令:
$ readelf --program-headers -W libBadFlags.so | grep WE
如果没有输出,你应该没事。如果是输出,则需要跟踪可写/可执行映射的来源。对于GNU_STACK
标头,它可能是一个缺少注释的汇编程序文件(仅仅是疏忽)。但更为模糊的事情是可能的,因此没有通用的解决方案。
但在大多数情况下,不需要对项目进行任何更改。