最近做NDK开发相关的项目,总会时不时冒出下面这句打印信息:
error: only position independent executables (PIE) are supported.
后面一查,原来是Android版本新添加的保护机制,以前在RK3168 android4.1上没有看到这个东西。
于是在Android源代码下找到:
bionic/linker/linker.cpp
搜索PIE:
找到以下这段:
//注释PIE选项
#if 0
ElfW(Ehdr)* elf_hdr = reinterpret_cast<ElfW(Ehdr)*>(si->base);
if (elf_hdr->e_type != ET_DYN) {
__libc_format_fd(2, "error: only position independent executables (PIE) are supported.\n");
exit(EXIT_FAILURE);
}
#endif
将其注释再重新编译系统即可。