天天看点

NDK编译程序运行出现 unused DT entry 错误

使用 NDK 制作的编译工具链编译出可执行文件后,传到 Android 中运行的时候,会出现如下的 WARNING 信息:

WARNING: linker: liblxc.so: unused DT entry: type 0x6ffffffe arg 0x8c04
WARNING: linker: liblxc.so: unused DT entry: type 0x6fffffff arg 0x1
           

提示信息可能有些数据不相同,但都属于 unused DT entry 问题;

官方已经给出了详细的说明、原因以及警告的类型,而且从 Android5.1开始,就会警告 verneed 和 verneednum 的问题;

下面给出解决方法:

  1. 制作 android_elf_cleaner 工具

    1) github地址下载android_elf_cleaner

    git clone https://github.com/kost/android-elf-cleaner.git
               
    如下载速度过慢可参考 https://blog.csdn.net/qq_30123335/article/details/116602517
               
    2)直接在 linux 中执行 make 命令,即可编译得到 android-elf-cleaner 可执行程序
    cd android_elf_cleaner
    make 
               
  2. 处理一下编译出来的可执行文件,再次运行即可消除此问题
    usage: ./android-elf-cleaner <filename>
           Processes ELF files to remove DT_VERNEEDED, DT_VERNEEDNUM, DT_RPATH
           and DT_RUNPATH entries (which the Android linker warns about)
               

结果如下:

NDK编译程序运行出现 unused DT entry 错误