【问题标题】:Hello World Android Program你好世界安卓程序
【发布时间】:2024-05-27 18:15:02
【问题描述】:

我刚刚构建了我的金鱼安卓内核。我编写了一个 hello world 程序并使用 arm-linux-gnueabi-gcc 进行编译。我使用 adb push 将可执行文件放在模拟内核的 /data/local 中。我能够使用 adb shell SSH 进入模拟内核。当我 cd 进入 /data/local 并 ls 目录时,我可以看到我使用 adb push 放置的 a.out。当我执行 #./a.out 时,我收到错误 ./a.out: not found.

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 检查该目录的权限
  • 权限好像没问题!
  • ldd ./a.out 的输出是什么?
  • ls 有效,因此该目录显然对相关用户帐户具有rx 权限。
  • 您是如何做到这一点的?请看我的问题*.com/questions/9324772/…

标签: android android-emulator


【解决方案1】:

我在编译期间添加了 -static 选项。 arm-linux-gnueabi-gcc -static

【讨论】:

    【解决方案2】:

    我猜这是缺少库的问题。我以前遇到过这个问题,我的解决方法如下:

    root@evab:~# ./a.out 
    -sh: ./a.out: not found
    root@evab:~# ls /lib /root
    /lib:
    libc.so.6
    
    /root:
    a.out
    root@evab:~# 
    

    然后检查应用程序需要哪个共享库:

    leo@leo-VirtualBox:/opt/nfs/root$ arm-linux-readelf a.out -a |grep lib
        [Requesting program interpreter: /lib/ld-linux.so.3]
        0x00000001 (NEEDED)                     Shared library: [libc.so.6]
    ... ...
    

    通过输出,我们可以确认ld-linux.so.3丢失了,所以将ld-linux.so.3复制到目标文件系统/lib目录:

    root@evab:~# ./a.out 
    test
    root@evab:~# ls /lib /root
    /lib:
    ld-linux.so.3 libc.so.6
    
    /root:
    a.out
    root@evab:~# 
    

    【讨论】: