在Android 8.0,My App的targetSdkVersion = 22中,我在调试时收到以下警告日志:
W / linker:" / data / app / my_package_name-ndPicG9hxEo009BA_zqNQw == / lib / arm / libxxx.so":不允许W + E加载段
我已经解决了"文本重定位"对于之前的.so文件,如果targetSdkVersion为26,则该应用程序将收到错误。我知道上述问题的原因,但我不知道如何修复此错误。
日志的源代码(bionic / linker / linker_phdr.cpp):
if ((prot & (PROT_EXEC | PROT_WRITE)) == (PROT_EXEC | PROT_WRITE)) {
// W + E PT_LOAD segments are not allowed in O.
if (get_application_target_sdk_version() >= __ANDROID_API_O__) {
DL_ERR_AND_LOG("\"%s\": W + E load segments are not allowed", name_.c_str());
return false;
}
DL_WARN("\"%s\": W + E load segments are not allowed", name_.c_str());
add_dlwarning(name_.c_str(), "W+E load segments");
}
所以关键是PROT_EXEC和PROT_WRITE权限。但是如何禁止这些许可呢?我需要你的帮助,谢谢!