【问题标题】:Android ndk building standalone toolchain for ARMAndroid ndk 为 ARM 构建独立工具链
【发布时间】:2014-06-27 10:11:36
【问题描述】:

我正在尝试为 GT-i9300 构建 objdump 可执行文件。

当我尝试使用 Android NDK 提供的错误时,我收到以下错误 在带有 su 的 adb shell 上:

root@m0:/data/local/tmp # ./arm-linux-androideabi-objdump                      
sh: ./arm-linux-androideabi-objdump: not executable: magic 7F45

根据this blog post,由于文件和设备的不同架构而引发错误。所以我需要为我的设备获取一个 objdump 版本:

shell@m0:/ $ uname -a
Linux localhost 3.0.64-CM #1 SMP PREEMPT Fri May 9 09:17:55 CEST 2014 armv7l GNU/Linux   

到目前为止,我通过在 Ubuntu 12.10

上按以下方式编译 arm-linux-androideabi-objdump
someuser@ubuntu1210:~$ uname -a
Linux ubuntu1210 3.11.0-20-generic #35~precise1-Ubuntu SMP Fri May 2 21:32:55 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

我编译了独立的工具链,我使用 ARM 作为 CPU:

someuser@ubuntu1210:~/Programs/android-ndk-r9d$ ./build/tools/make-standalone-toolchain.sh --platform=android-19 --install-dir=/home/someuser/my-android-toolchain --verbose
Auto-config: --arch=arm
Auto-config: --toolchain=arm-linux-androideabi-4.6
Targetting CPU: arm
Using GCC version: 4.6
Copying prebuilt binaries...
## COMMAND: copy_directory ./toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64 /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6
Copying directory: 
  from ./toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6
Copying directory: 
  from ./prebuilt/linux-x86_64/include/python2.7
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/include/python2.7
Copying directory: 
  from ./prebuilt/linux-x86_64/lib/python2.7
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/lib/python2.7
Copying file: python python2 python2.7
  from ./prebuilt/linux-x86_64/bin
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/bin
Copying sysroot headers and libraries...
## COMMAND: copy_directory_nolinks ./platforms/android-19/arch-arm/usr/include /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/sysroot/usr/include
Copying directory (without symlinks): 
  from ./platforms/android-19/arch-arm/usr/include
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/sysroot/usr/include
## COMMAND: copy_directory_nolinks ./platforms/android-19/arch-arm/usr/lib /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/sysroot/usr/lib
Copying directory (without symlinks): 
  from ./platforms/android-19/arch-arm/usr/lib
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/sysroot/usr/lib
Copying libstdc++ headers and libraries...
Copying directory: 
  from ./sources/cxx-stl/gnu-libstdc++/4.6/include
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/include/c++/4.6
Copying directory: 
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include/bits
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/include/c++/4.6/arm-linux-androideabi//bits
Copying file: libgnustl_shared.so
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/
Copying file: libsupc++.a
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/
Copying directory: 
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include/bits
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/include/c++/4.6/arm-linux-androideabi//thumb/bits
Copying file: libgnustl_shared.so
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/thumb
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib//thumb
Copying file: libsupc++.a
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/thumb
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib//thumb
Copying directory: 
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include/bits
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/include/c++/4.6/arm-linux-androideabi/armv7-a/bits
Copying file: libgnustl_shared.so
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/armv7-a
Copying file: libsupc++.a
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/armv7-a
Copying directory: 
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include/bits
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/include/c++/4.6/arm-linux-androideabi/armv7-a/thumb/bits
Copying file: libgnustl_shared.so
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/thumb
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/armv7-a/thumb
Copying file: libsupc++.a
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/thumb
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/armv7-a/thumb
Copying directory: 
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a-hard/include/bits
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/include/c++/4.6/arm-linux-androideabi/armv7-a/hard/bits
Copying file: libgnustl_shared.so
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a-hard/.
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/armv7-a/hard
Copying file: libsupc++.a
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a-hard/.
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/armv7-a/hard
Copying directory: 
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a-hard/include/bits
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/include/c++/4.6/arm-linux-androideabi/armv7-a/thumb/hard/bits
Copying file: libgnustl_shared.so
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a-hard/thumb
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/armv7-a/thumb/hard
Copying file: libsupc++.a
  from ./sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a-hard/thumb
  to /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6/arm-linux-androideabi/lib/armv7-a/thumb/hard
Copying files to: /home/someuser/my-android-toolchain
## COMMAND: copy_directory /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6 /home/someuser/my-android-toolchain
Copying directory: 
  from /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6
  to /home/someuser/my-android-toolchain
Cleaning up...
## COMMAND: rm -rf /tmp/ndk-someuser/tmp/build-3493/standalone/arm-linux-androideabi-4.6
Done.
someuser@ubuntu1210:~/Programs/android-ndk-r9d$ cd /home/someuser/my-android-toolchain/
someuser@ubuntu1210:~/my-android-toolchain$ cd bin/
someuser@ubuntu1210:~/my-android-toolchain/bin$ file arm-linux-androideabi-objdump 
arm-linux-androideabi-objdump: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
someuser@ubuntu1210:~/my-android-toolchain/bin$ 

我编译后得到的格式:

someuser@ubuntu1210:~/my-android-toolchain/bin$ file arm-linux-androideabi-objdump 
    arm-linux-androideabi-objdump: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped

我的问题是:为什么编译的结果 arm-linux-androideabi-objdump 不是所需的格式,以便我可以从设备 adb shell 执行它?

【问题讨论】:

    标签: android android-ndk toolchain binutils


    【解决方案1】:

    我觉得这很正常。

    NDK 的目标是生成交叉编译工具链。因此,所有这些工具都是您的主机平台 (linux/x86-64) 的原生工具,但会读取并生成目标 (android/arm) 格式。

    要为您的目标平台生成可执行的 objdump,您必须使用这些工具来编译 objdump。

    【讨论】:

      猜你喜欢
      • 2012-02-16
      • 2013-07-17
      • 2019-02-22
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多