Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android OS Entwicklung / Customize

C-Programm auf Android

Das Thema "C-Programm auf Android" befindet sich unter Android OS Entwicklung / Customize auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 02.05.2011, 14:23   #1 (permalink)
Neuer Benutzer

Registriert seit: 25.04.2011
Beiträge: 16
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard C-Programm auf Android

Hallo,

Wie kann ich ein C Programm von meiner Linux Kiste auf das Android Handy bringen???
Ich habe jetzt schon zig Anleitungen durch angefanngen von agcc bis hin zum ndk... Nichts funktioniert.

Im Moment probier ich es mit folgendem Makefile:
Zitat:
# Dynamic hello example for Android NDK
# motz diary: Dynamically linked "Hello, world!" for Android

NDK = /usr/src/android-ndk-1.5_r1
NDK_ARCH = $(NDK)/build/platforms/android-1.5/arch-arm
NDK_COMP = $(NDK)/build/prebuilt/linux-x86/arm-eabi-4.2.1

ifneq ($(shell uname -m),armv6l)
# When not compiling on the phone use cross compiler
CROSS_COMPILE = /opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi-gcc
endif

CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld

# bionic setbuf() segfaults, do not use
CFLAGS += -D'setbuf(a,b)='
CFLAGS += -DUSE_FPM
CFLAGS += -I$(NDK_ARCH)/usr/include

%o: %c Makefile
$(CC) $(CFLAGS) -c $<

all: hello-gcc hello-ld

hello-gcc: hello.o fpm.o
strace -o bla.txt -s 512 -f $(CC) -o $@ \
-nostartfiles -nodefaultlibs -nostdlib \
-lc -lm -lgcc -L$(NDK_ARCH)/usr/lib \
-Wl,-rpath-link -Wl,$(NDK_ARCH)/usr/lib \
-Wl,--dynamic-linker -Wl,/system/bin/linker \
$(NDK_ARCH)/usr/lib/crtbegin_dynamic.o \
$^ \
$(NDK_ARCH)/usr/lib/crtend_android.o

hello-ld: hello.o fpm.o
$(LD) -o $@ \
-lc -lm -lgcc -L$(NDK_ARCH)/usr/lib \
-L$(NDK_COMP)/lib/gcc/arm-eabi/4.2.1 \
-rpath-link $(NDK_ARCH)/usr/lib \
--dynamic-linker /system/bin/linker \
$(NDK_ARCH)/usr/lib/crtbegin_dynamic.o \
$^ \
$(NDK_ARCH)/usr/lib/crtend_android.o

clean:
rm -f hello-ld hello-gcc
rm -f *.o
rm -f *~
Das Ergebnis ist dann:
Zitat:
/opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi-gcc gcc -D'setbuf(a,b)=' -DUSE_FPM -I/usr/src/android-ndk-1.5_r1/build/platforms/android-1.5/arch-arm/usr/include -c hello.c
arm-eabi-gcc: gcc: No such file or directory
In file included from hello.c:1:
/opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/../lib/gcc/arm-eabi/4.4.0/include-fixed/stdio.h:50:23: error: sys/cdefs.h: No such file or directory
/opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/../lib/gcc/arm-eabi/4.4.0/include-fixed/stdio.h:51:24: error: sys/_types.h: No such file or directory
In file included from hello.c:1:
/opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/../lib/gcc/arm-eabi/4.4.0/include-fixed/stdio.h:163: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'extern'
/opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/../lib/gcc/arm-eabi/4.4.0/include-fixed/stdio.h:232: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__BEGIN_DECLS'
/opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/../lib/gcc/arm-eabi/4.4.0/include-fixed/stdio.h:382: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__BEGIN_DECLS'
/opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/../lib/gcc/arm-eabi/4.4.0/include-fixed/stdio.h:393: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'static'
hello.c:2:18: error: time.h: No such file or directory
hello.c: In function 'main':
hello.c:10: error: 'time_t' undeclared (first use in this function)
hello.c:10: error: (Each undeclared identifier is reported only once
hello.c:10: error: for each function it appears in.)
hello.c:10: error: expected ';' before 't'
hello.c:14: error: 't' undeclared (first use in this function)
make: *** [hello.o] Fehler 1
EDIT:
Zitat:
root@raw:/opt/android/shellfiles# ./agcc -o main main.c
arm-eabi-gcc: /opt/android/ndk/toolchains/arm-eabi-4.4.0/out/target/product/generic/obj/lib/crtend_android.o: No such file or directory
arm-eabi-gcc: /opt/android/ndk/toolchains/arm-eabi-4.4.0/out/target/product/generic/obj/lib/crtbegin_dynamic.o: No such file or directory
arm-eabi-gcc: /opt/android/ndk/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a: No such file or directory
cc1: error: /opt/android/ndk/toolchains/arm-eabi-4.4.0/system/core/include/arch/linux-arm/AndroidConfig.h: No such file or directory
main.c: In function 'main':
main.c:4: warning: incompatible implicit declaration of built-in function 'printf'


Die Fehler bezüglich den fehlenden Libs etc. bekomme ich bei agcc auch.
Kann mir wer weiterhelfen? Ich find den Fehler nicht...

Geändert von htcdesiree (02.05.2011 um 14:30 Uhr)
htcdesiree ist offline   Mit Zitat antworten
Alt 03.05.2011, 08:23   #2 (permalink)
Android Experte
 
Benutzerbild von ramdroid

Modell: HTC Wildfire, Motorola Xoom, Galaxy Nexus

Registriert seit: 20.10.2010
Beiträge: 651
Abgegebene Danke: 50
Erhielt 87 Danke für 77 Beiträge
Standard AW: C-Programm auf Android

Es wird wohl irgendwie mit dem NDK funktionieren, aber habe ich auch nicht hinbekommen (bin ja eigentlich auch Linux Neuling)

Habe irgendwo einen Download für einen cross compiler gefunden mit dem es aber dann auch geradewegs funktioniert hat. Das schaut dann so aus:

Hello.c

Zitat:
#include <stdio.h>
int main(void)
{
printf("Hello, Droid\n");
return 0;
}
Make:

Zitat:
~/cross-compiler-armv6l/bin/armv6l-g++ --static hello.c -o hello

Habe den CC über mein Dropbox freigegeben (sind knapp über 20mb):

http://dl.dropbox.com/u/11516830/cro...armv6l.tar.bz2
__________________
App Quarantine (ROOT)
ramdroid ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei ramdroid für diesen Beitrag:
PJF16 (03.05.2011)
Alt 03.05.2011, 08:43   #3 (permalink)
Neuer Benutzer

Registriert seit: 25.04.2011
Beiträge: 16
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: C-Programm auf Android

Danke für die rasche Antwort!
Werd's gleich mal ausprobieren.
htcdesiree ist offline   Mit Zitat antworten
Alt 03.05.2011, 08:44   #4 (permalink)
Neuer Benutzer

Registriert seit: 25.04.2011
Beiträge: 16
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: C-Programm auf Android

edit hat sich erledigt
link funktioniert - probier die sache jetzt gleic haus.
htcdesiree ist offline   Mit Zitat antworten
Alt 03.05.2011, 08:54   #5 (permalink)
Neuer Benutzer

Registriert seit: 25.04.2011
Beiträge: 16
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: C-Programm auf Android

Hallo,

Kompilierungsvorgang funktioniert jetzt einwandfrei.
Wenn ich das Programm auf dem HTC mit ./programm starte bekomme ich leider "Permission Denied".
Hab zur Sicherheit chmod 777 gemacht - keine Änderung.
htcdesiree ist offline   Mit Zitat antworten
Alt 03.05.2011, 09:01   #6 (permalink)
Android Experte
 
Benutzerbild von ramdroid

Modell: HTC Wildfire, Motorola Xoom, Galaxy Nexus

Registriert seit: 20.10.2010
Beiträge: 651
Abgegebene Danke: 50
Erhielt 87 Danke für 77 Beiträge
Standard AW: C-Programm auf Android

Zitat:
Zitat von htcdesiree Beitrag anzeigen
Hallo,

Kompilierungsvorgang funktioniert jetzt einwandfrei.
Wenn ich das Programm auf dem HTC mit ./programm starte bekomme ich leider "Permission Denied".
Hab zur Sicherheit chmod 777 gemacht - keine Änderung.
wohin hast du's denn kopiert?
Auf der SD Karte hast du meines Wissens nach z.B. keine Ausführ-Rechte

du kannst sonst einfach:

Zitat:
adb push program /data/local
adb shell
cd /data/local
chmod 744 program
./program
__________________
App Quarantine (ROOT)
ramdroid ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei ramdroid für diesen Beitrag:
htcdesiree (03.05.2011)
Alt 03.05.2011, 09:35   #7 (permalink)
Neuer Benutzer

Registriert seit: 25.04.2011
Beiträge: 16
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: C-Programm auf Android

Zitat:
Zitat von ramdroid Beitrag anzeigen
wohin hast du's denn kopiert?
Auf der SD Karte hast du meines Wissens nach z.B. keine Ausführ-Rechte

du kannst sonst einfach:
Danke!
Verdammt ich hätte einfach die mount table anschauen sollen, dann hät ichs selber gesehen....

Funktioniert jetzt
*bitte nicht erschlagen für den fehler*
htcdesiree ist offline   Mit Zitat antworten
Alt 03.05.2011, 13:32   #8 (permalink)
Neuer Benutzer

Registriert seit: 25.04.2011
Beiträge: 16
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: C-Programm auf Android

Edit:
Kann es sein dass popen() auf Android nicht funktioniert?
Habe eine Funktion wie:
Zitat:
void exec_syscall (string command)
{
cout << "var:" << command;
char buffer[50000];
FILE *stream;
stream = popen(command.c_str(),"r");
while (fgets(buffer, 50000, stream) != NULL )
{
cout<<buffer;
cout<<endl;
}
}
Bringt mir einfach kein Ergebnis! z.B. wird
Zitat:
id
oder
Zitat:
ls
übergeben. Nichts. Ich bekomme:
Zitat:
var: ls
aber popen() führt nichts aus...
habe auch schon versucht:
Zitat:
/system/bin/id
zu übergeben - selbes Ergebnis.

Weiß da wer bescheid?
htcdesiree ist offline   Mit Zitat antworten
Alt 03.05.2011, 17:07   #9 (permalink)
Neuer Benutzer

Registriert seit: 24.02.2011
Beiträge: 18
Abgegebene Danke: 2
Erhielt 1 Danke für 1 Beitrag
Standard AW: C-Programm auf Android

Überprüfe mal ob stream == NULL und gib dann die errno aus.
Außerdem würde ich nicht so viel Stack verbraten.
Das geht auch in kleineren Häppchen.
XPosition ist offline   Mit Zitat antworten
Alt 04.05.2011, 08:46   #10 (permalink)
Neuer Benutzer

Registriert seit: 25.04.2011
Beiträge: 16
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: C-Programm auf Android

Hey,
Also hab mal mit NULL abgefragt

Code:
void exec(string cmd)
{
        cout << "GET VALUE: " << cmd << endl;
  char buffer[BUFFER_SIZE];
  FILE *stream;

  stream = popen(cmd.c_str(), "r");
if (stream == NULL)
        cout << "Stream is NULL" <<endl;

  while ( fgets(buffer, BUFFER_SIZE, stream) != NULL )
        cout << buffer <<endl;

  pclose(stream);
}
Aber stream scheint nicht NULL zu sein, falle da mal nicht in die IF-Condition rein.

Des weiteren scheinen Codestücke wie
Code:
system("id > /data/local/test");
Auch nicht zu funktionieren....

Weiß da wer Bescheid?

Geändert von htcdesiree (04.05.2011 um 08:51 Uhr)
htcdesiree ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
Programm-Ordner auf externe SD-Karte auslagern? MarJu Samsung Galaxy S (I9000) Forum 24 08.09.2010 14:52
Programm-Ordner auf externe SD-Karte auslagern? MarJu Android Allgemein 0 23.08.2010 16:04
Eigenes Android Programm schreiben!? rotkelch Android App Entwicklung 12 27.05.2010 17:53
diverse fehler nach Programm-Löschen auf CM 4.2.15.1 G1noob Root / Hacking / Modding für T-Mobile G1 20 18.03.2010 09:50
[Suche] Programm um per T9 Tastatur schnell ein Programm aufzurufen oliverbenduhn Individualisierung 3 12.11.2009 12:37




Du liest gerade: "C-Programm auf Android" unter "Android OS Entwicklung / Customize" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.