Кросс-компиляция статического C hello world для Android с использованием arm-linux-gnueabi-gcc - PullRequest
35 голосов
/ 17 февраля 2012

Я хочу построить статический мир приветствия из C, используя arm-linux-gnueabi-gcc, а не использовать отдельный набор инструментов NDK или Codesourcery.

В Ubuntu ...

Я сделал следующее:

sudo apt-get install gcc-arm-linux-gnueabi

Я создал hi.c следующим образом:

#include <stdio.h>

int main(int argc, char** argv) {
   printf("hello world\n");
   return 0;
}

Я скомпилировал его так:

arm-linux-gnueabi-gcc -static hi.c -o hi 

Я запустил его на эмуляторе так:

adb push hi /data/hi
adb shell /data/hi

Но я получаю это:

[1]   Illegal instruction     /data/hi

Какой шаг я забыл?Исходя из прошлого опыта, это «должно было» сработать, но я, очевидно, все испортил.

Ответы [ 6 ]

14 голосов
/ 20 февраля 2012

Попробуйте указать архитектуру / процессор. Похоже, что компилятор создает код с более высокой версией архитектуры, чем эмулятор.

Это может сработать:

arm-linux-gnueabi-gcc -static -march=armv5 hi.c -o hi
9 голосов
/ 24 марта 2012

У меня это работало с компилятором CodeBench на рабочем столе Ubuntu. https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029

Просто создайте статический двоичный файл с помощью этой команды:

arm-none-linux-gnueabi-gcc -o привет -статик привет.c

затем, adb push hello / data

перейти к, adb shell $ ./data/hello Это напечатает Hello World на терминале. То же самое можно сделать и с телефона. Для запуска используйте эмулятор терминала или оболочку SL4A.

3 голосов
/ 01 марта 2012

Если я делаю это на компьютере Debian (в моем случае это VM), все выглядит хорошо.Я не уверен, что, когда неправильно делать подобное на Ubuntu.Это может быть, как предположил Лео, но я не могу подтвердить.Это должно работать для вас, хотя.

http://www.cnx -software.com / 2012/01/16 / Установка-Emdebian-Arm-Cross-Toolchain-в-Debian /

Кто-то добавил эту ссылку, но она не использует цепочку инструментов, о которой я говорил в описании.Оставьте на всякий случай.

http://tariqzubairy.wordpress.com/2012/03/09/arm-binaries-static-library-for-android/

1 голос
/ 17 февраля 2012

Насколько я знаю, вы не можете запускать пользовательские приложения в Android, которые не скомпилированы с какой-либо формой gcc-arm-linux-androideabi.

0 голосов
/ 10 декабря 2013

Ваш код действительно работает для меня.

Я скомпилировал его в Ubuntu и отправил в / data / local / tmp

А затем chmod 777 hi

Наконец-тохорошо работает.

0 голосов
/ 27 февраля 2012

Вы проверяли права доступа к папке с данными? Попробуйте использовать местный вместо этого! Вы можете просто использовать оболочку adb, а затем перейти в папку, куда был загружен исполняемый файл, и попробовать ./hi. Я думаю, это просто проблема с разрешениями

...