Запуск программы C на Android - PullRequest
       19

Запуск программы C на Android

3 голосов
/ 12 декабря 2011

Я скомпилировал простую программу на C для Android через NDK и запустил ее на Android.

Источник C:

#include <stdio.h>
int
main ()
{
    printf ("Hello world!\n");
}

Скрипт для источника компиляции C:

#!/bin/bash
PREFIX="/opt/android-ndk-r7"
CC="$PREFIX/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-arm/bin/arm-linux-androideabi-gcc"
NDK="$PREFIX/platforms/android-14/arch-arm"
CFLAGS="-I$NDK/usr/include"
LDFLAGS="-nostdlib -Wl,-rpath-link=$NDK/usr/lib -L$NDK/usr/lib $NDK/usr/lib/crtbegin_dynamic.o -lc"
$CC -o hello hello.c $CFLAGS $LDFLAGS

Что произошло, когда я запустил программу на терминале на Android:

$ export PATH=/data/local/bin:$PATH
$ hello
Hello world!
[1] + Stopped (signal)        hello
$ exit
You have stopped jobs.
[1]   Illegal instruction      hello
$ exit

Когда я запустил программу, она работала, но затем произошли «Остановлено» и «Недопустимая инструкция».
Что я должен сделать для решенияэто проблема?

1 Ответ

0 голосов
/ 12 декабря 2011

Я с @Amigable Кларком Кентом в этом.Подумайте, что у вас там.
Вы говорите компилятору, что main () вернет int.При запуске загрузчик готовится получить возвращенное значение из функции, которая фактически никогда не возвращается.Не имеет значения, ищет ли он его в регистре или в стеке, это место будет содержать неправильные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...