Android運行Linux程序


Android 的內核是 Linux,因此 Android 應該可以運行 Linux 程序。

舉個例子

#include <unistd.h>

int main()
{
    write(1, "Hello World!\n", 13);
}

如果我們不用 NDK 而是用 Linux 的編譯器來編譯,就會生成一個 Linux 程序

aarch64-linux-gnu-gcc-10 hello.c -o hello.elf

直接在 Android 中運行 hello.elf 肯定會報錯,原因有兩個:首先 Android 的 interpreter 是 /system/bin/linker64 而 Linux 的 interpreter 是 ld-linux-aarch64.so.1,其次 Android 鏈接的 libc.so 和 Linux 的 libc.so 也不同。

所以我們首先要把 ld-linux-aarch64.so.1 和 libc.so.6 復制到 Android,在這個例子中我把它們復制到了 /data/local/tmp 目錄。然后為了讓操作系統能夠找到它們,我們需要對生成的 Linux 程序進行一點修改。

我們需要用到 patchelf(https://github.com/NixOS/patchelf) 這個工具。

patchelf --set-interpreter /data/local/tmp/ld-linux-aarch64.so.1 ./hello.elf
patchelf --set-rpath /data/local/tmp ./hello.elf

修改完成后就可以在 Android 中運行這個程序了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM