【问题标题】:Android gcc sysroot and linkerAndroid gcc sysroot 和链接器
【发布时间】:2013-01-18 19:14:02
【问题描述】:

我正在 Ubuntu Linux 10.0.4 上使用 Android NDK Linux build 编译一个简单的程序。

//no includes!!!
int main()
{   
    int a = 1, b = 2, c = -1;
    return a + b + c - ( a + b + c);

}

当我为 gcc 运行这个 bash 脚本时,

bin='/media/sdb/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin'
rm -r ./obj/*.* 
    $bin/arm-linux-androideabi-gcc -c ./main.c -o ./obj/main.o 
    $bin/arm-linux-androideabi-gcc ./obj/main.o -o ./obj/main.exe 

gcc 的输出给出了来自ld (arm-linux-androideabi-ld) 的消息,它以7 (second comma-delimited is ARM) 信号终止。

这个简单的程序甚至无法在 Linux 上编译,请帮助!

【问题讨论】:

  • main.o 是第一个命令创建的已经可执行的二进制文件。我不知道你想用第二个实现什么。
  • 我不知道 main.o 文件是可执行的。不相关,对于引用的库 (.a) 文件的稳健性。似乎需要先编译 ./main.c 然后 ./obj/main.o [with any includes]
  • 对不起我的错误,我看到它是(没有-c)$bin/arm-linux-androideabi-gcc ./main.c -o ./obj/main.o
  • 我最好的猜测是你的编译触发了另一个 ld,而不是来自 ndk 的那个。
  • 顺便说一下,不要在路径中的任何地方使用波浪号 ~

标签: c gcc android-ndk


【解决方案1】:

我已经在 ubuntu 12.4 中安装了静态工具链

sudo apt-get install gcc-arm-linux-gnueabi  // install this toolchain 

arm-linux-gnueabi-gcc -static -o main.exe main.c  // this way compile ur binary

通过安卓机器中的adb复制并运行

./main.exe

这适用于我的安卓手机。

编辑:

10.04

   sudo add-apt-repository ppa:linaro-maintainers/toolchain
    sudo apt-get update
    sudo apt-get install gcc-arm-linux-gnueabi

编辑2: 它的静态编译在这里不使用仿生代码,而是通过将库复制到 ELF 中来包含库。

如果你想动态编译或者想依赖仿生代码那就用

$NDK/docs/STANDALONE-TOOLCHAIN.html https://android.googlesource.com/platform/ndk/+/master/docs/STANDALONE-TOOLCHAIN.html

【讨论】:

  • 对不起,我在 ubuntu 12.04
  • 我不知道你所说的静态工具链是什么意思,但 android 有自己的运行时库(仿生),所以虽然你当然可以获得可运行的可执行文件,但使用 ndk 的工具链是一个更好的主意。
  • @auselen static 表示它不使用仿生代码。使用这种方式生成的二进制文件具有比动态构建或 ndk 构建更大的大小。对于动态构建,我将我的代码放在 android 源代码树中并编译,因此它使用二元代码。我不知道如何使用 NDK..
  • @T.Webster 是的静态意味着它通过将库复制到 ELF.NDK 中来包含库应该这样做,但我不知道为什么它不这样做。您的错误表明它缺少仿生组件。
猜你喜欢
  • 1970-01-01
  • 2013-07-10
  • 2013-10-26
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
相关资源
最近更新 更多