Android Toolchain - Pfadangaben

  • 18 Antworten
  • Letztes Antwortdatum
L

lieckedeeler

Gast
Hallo zusammen,

ich möchte Euch um Hilfe bitte, denn ich komme hier nicht mehr weiter....:sad:

Zur Zeit versuche ich DVBlast für Android zu kompilieren da ich DVB-Unterstüzung in meinen Kernel integriert habe.

Hierfür habe ich mir die Android-NDK-RB8 heruntergeladen. Den Quellcode für DVBlast habe ich aus dem Git ausgecheckt.

Als ich den Kernel kompiliert habe, habe ich folgenden Export-Pfad für die Toolchain benutzt.

/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
Nun sagen die von Video-Lan
Cross compiling is now as easy as running `make CROSS=sh4-linux-` if your compiler is in the PATH and it is named sh4-linux-cc.
Also habe ich folgendes gemacht
export PATH="/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/:${PATH}"

make CROSS=arm-linux-androideabi-
Das klappt nur leider nicht..... Ich bekomme folgende Meldung

In file included from dvblast.c:25:
/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/include-fixed/stdio.h:50:23:
Wenn ich das richtig deute, dann läuft da irgendwas mit dem INCLUDE Path nicht richtig, oder? Kann mir jemand sagen, ob ich das richtig sehe, und wie man das fixt?

Vielen Dank schon mal....
 
Zuletzt bearbeitet von einem Moderator:
lieckedeeler schrieb:
Wenn ich das richtig deute, dann läuft da irgendwas mit dem INCLUDE Path nicht richtig, oder? Kann mir jemand sagen, ob ich das richtig sehe, und wie man das fixt?

Vielen Dank schon mal....

Sieht nicht so aus. "include-fixed/stdio.h" wird ja gefunden. Leider hast Du die nachfolgenden Ausgaben weggekürzt. Kannst Du mal
"make CROSS=arm-linux-androideabi- 2>&1 | tee build.log" aufrufen und die vollständige build.log posten?
 
@jpo234

Ich habe mal die Ausgaben geloggt..

http://pastebin.com/raw.php?i=YxdXGNHb

So wie ich das sehe, findet er die stdlib.h nicht...

Diese liegt bei mir unter
/root/android-ndk-r8b/platforms/android-8/arch-arm/usr/include/stdlib.h
Jetzt versuche ich schon die ganze Zeit dem Makefile diesen "include" Pfad mitzugeben... Leider bin ich bei C++ ein totaler Noob.

Und diese "Adressierung"
prebuilt/linux-x86/bin/../lib/gcc/arm-
kann doch so garnicht funktionieren... also mit den ../ oder sehe ich das falsch?
 
Zuletzt bearbeitet von einem Moderator:
lieckedeeler schrieb:
@jpo234

Ich habe mal die Ausgaben geloggt..

CC dvblast.c dvblast.c:24:20: error: stdlib.h: No such file or directory - Pastebin.com

So wie ich das sehe, findet er die stdlib.h nicht...

Diese liegt bei mir unter
Jetzt versuche ich schon die ganze Zeit dem Makefile diesen "include" Pfad mitzugeben... Leider bin ich bei C++ ein totaler Noob.

Und diese "Adressierung"

kann doch so garnicht funktionieren... also mit den ../ oder sehe ich das falsch?

Das ist pures C, nicht C++.

Tatsächlich findet der Compiler die ganzen libc-Header nicht. Probier doch mal CPATH auf das include-Verzeichnis mit den libc-Headern zu setzen. Ich kenne das Layout des NDK nicht, aber irgendwo <ndk>/docs/system/libc/ sollte das zu finden sein.

Und was soll falsch sein an dem Pfad? ".." ist absolut legal und sicher nicht das Problem...

Und was sagt der NDK gcc mit der Option -print-search-dirs ?
 
Zuletzt bearbeitet:
So.... hier mal die Ausgabe zu "arm-linux-androideabi-gcc -print-search-dirs"

arm-linux-androideabi-gcc -print-search-dirs
install: /root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/
programs: =/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../libexec/gcc/arm-linux-androideabi/4.4.3/:/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../libexec/gcc/:/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/arm-linux-androideabi/4.4.3/:/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/
libraries: =/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/:/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/:/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib/arm-linux-androideabi/4.4.3/:/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib/:/tmp/ndk-andrewhsieh/build/toolchain/prefix/sysroot/lib/arm-linux-androideabi/4.4.3/:/tmp/ndk-andrewhsieh/build/toolchain/prefix/sysroot/lib/:/tmp/ndk-andrewhsieh/build/toolchain/prefix/sysroot/usr/lib/arm-linux-androideabi/4.4.3/:/tmp/ndk-andrewhsieh/build/toolchain/prefix/sysroot/usr/lib/
Hier nochmal was ich jetzt gemacht habe....

root@kernel-builder:~# export PATH=/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/:$PATH
root@kernel-builder:~# export CPATH=/root/android-ndk-r8b/platforms/android-8/arch-arm/usr/include/:$CPATH
root@kernel-builder:~# cd build_src/
root@kernel-builder:~/build_src# cd dvblast/
root@kernel-builder:~/build_src/dvblast# make CROSS=arm-linux-androideabi-
CC dvblast.c
dvblast.c:44:19: error: iconv.h: No such file or directory
dvblast.c:47:30: error: bitstream/dvb/si.h: No such file or directory
dvblast.c:48:32: error: bitstream/ietf/rtp.h: No such file or directory
dvblast.c:96: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i_print_type'
dvblast.c: In function 'config_ParseHost':
dvblast.c:273: error: 'RTP_HEADER_SIZE' undeclared (first use in this function)
dvblast.c:273: error: (Each undeclared identifier is reported only once
dvblast.c:273: error: for each function it appears in.)
dvblast.c: In function 'main':
dvblast.c:860: error: 'PRINT_TEXT' undeclared (first use in this function)
dvblast.c:860: error: 'i_print_type' has an incomplete type
dvblast.c:862: error: 'PRINT_XML' undeclared (first use in this function)
dvblast.c:862: error: 'i_print_type' has an incomplete type
dvblast.c:897: error: 'i_print_type' has an incomplete type
dvblast.c:939: error: 'iconv_t' undeclared (first use in this function)
dvblast.c:939: error: expected ';' before 'iconv_system'
dvblast.c:941: error: 'iconv_system' undeclared (first use in this function)
dvblast.c:947: warning: implicit declaration of function 'iconv'
dvblast.c:955: warning: implicit declaration of function 'iconv_close'
dvblast.c:968: warning: implicit declaration of function 'dvb_string_set'
dvblast.c:970: warning: assignment makes pointer from integer without a cast
dvblast.c:1027: error: 'i_print_type' has an incomplete type
make: *** [dvblast.o] Fehler 1
root@kernel-builder:~/build_src/dvblast# find / | grep iconv.h
/usr/include/iconv.h
Jetzt fehlt ihm anscheinend das "/usr/include" Verzeichnis....

Das kann nicht damit zusammenhängen, dass ich in der NDK einen Link gesetzt habe von "arm-linux-androideabi-gcc" auf "arm-linux-androideabi-cc", weil ohne dem lief der garnicht erst los....
 
lieckedeeler schrieb:
So.... hier mal die Ausgabe zu "arm-linux-androideabi-gcc -print-search-dirs"

Hier nochmal was ich jetzt gemacht habe....

Jetzt fehlt ihm anscheinend das "/usr/include" Verzeichnis....

Das kann nicht damit zusammenhängen, dass ich in der NDK einen Link gesetzt habe von "arm-linux-androideabi-gcc" auf "arm-linux-androideabi-cc", weil ohne dem lief der garnicht erst los....

Das /usr/include ist aus der PC-Umgebung. Das willst Du nicht.
Guck lieber in die dvblast config.h:

Dort gibt's die Zeile:
Code:
  33 #define HAVE_ICONV
Die solltest Du löschen oder auskommentieren!

Bezüglich:
Code:
dvblast.c:47:30: error: bitstream/dvb/si.h: No such file or directory
dvblast.c:48:32: error: bitstream/ietf/rtp.h: No such file or directory
steht im INSTALL:
Code:
  21 DVBlast 2.X no longer requires libdvbpsi runtime and libdvbpsi-devel for
  22 compilation. Instead you must install biTStream on your build machine (no
  23 runtime library is needed).
Du brauchst also git.videolan.org/?p=bitstream.git
Offensichtlich reichen aber die Header-Files, Du brauchst biTStream nicht mit dem NDK zu übersetzen.
 
Zuletzt bearbeitet:
@jpo234

also das ich bitstream brauchte, war mir schon klar, allerdings nicht, das ich das in den dvblast ordner auschecken muss.... Danke für den Hinweis.... Ich habe das die ganze Zeit nach der "normalen" Methode gemacht, also bitstream ausgecheckt in den oder gewechselt, dann "make install".

Nun denn... hier ist der Stand der Dinge....

Habe bitstream in den dvblast ordner ausgecheckt. Beim ersten Versuch gab's folgende Meldung
dvb.c:45:31: error: linux/dvb/version.h: No such file or directory
dvb.c:46:27: error: linux/dvb/dmx.h: No such file or directory
dvb.c:47:32: error: linux/dvb/frontend.h: No such file or directory
dvb.c:48:26: error: linux/dvb/ca.h: No such file or directory
Okay.... habe ich mir gedacht, also habe ich die Header aus dem Kernel in den dvblast ordner gelinkt.

Jetzt kommt das....

make CROSS=arm-linux-androideabi-
CC dvblast.c
In file included from ./bitstream/dvb/si.h:41,
from dvblast.c:47:
./bitstream/dvb/si/datetime.h: In function 'dvb_time_decode_UTC':
./bitstream/dvb/si/datetime.h:91: warning: implicit declaration of function 'timegm'
CC util.c
util.c: In function 'msleep':
util.c:216: warning: implicit declaration of function 'clock_nanosleep'
CC dvb.c
In file included from /root/android-ndk-r8b/platforms/android-8/arch-arm/usr/include/netinet/in.h:34,
from dvb.c:39:
/root/android-ndk-r8b/platforms/android-8/arch-arm/usr/include/linux/in6.h:123:1: warning: "IPV6_ADD_MEMBERSHIP" redefined
In file included from dvb.c:22:
config.h:57:1: warning: this is the location of the previous definition
In file included from /root/android-ndk-r8b/platforms/android-8/arch-arm/usr/include/netinet/in.h:34,
from dvb.c:39:
/root/android-ndk-r8b/platforms/android-8/arch-arm/usr/include/linux/in6.h:124:1: warning: "IPV6_DROP_MEMBERSHIP" redefined
In file included from dvb.c:22:
config.h:58:1: warning: this is the location of the previous definition
CC udp.c
udp.c: In function 'udp_Open':
udp.c:194: error: incompatible types when assigning to type '__u32' from type 'struct in_addr'
udp.c:195: error: request for member 's_addr' in something not a structure or union
udp.c:196: error: incompatible types when assigning to type '__u32' from type 'struct in_addr'
make: *** [udp.o] Fehler 1
Anscheinend tritt hier ein Fehler auf der aus der Typ Zuweisung resultiert. Liegt das daran, das "ARM" hier einen anderen Typ benötigt als "i386" ?
 
Zuletzt bearbeitet von einem Moderator:
lieckedeeler schrieb:
Anscheinend tritt hier ein Fehler auf der aus der Typ Zuweisung resultiert. Liegt das daran, das "ARM" hier einen anderen Typ benötigt als "i386" ?

Du musst die Header des Acer-Kernels nehmen!!!!!
 
Hab' ich doch :crying:.... das sind die Header des Acer Kernels mit denen ich mein zImage gebaut habe.... Ich dreh' hier echt noch durch.... :biggrin:
 
lieckedeeler schrieb:
@jpo234

also das ich bitstream brauchte, war mir schon klar, allerdings nicht, das ich das in den dvblast ordner auschecken muss.... Danke für den Hinweis.... Ich habe das die ganze Zeit nach der "normalen" Methode gemacht, also bitstream ausgecheckt in den oder gewechselt, dann "make install".

Nun denn... hier ist der Stand der Dinge....

Habe bitstream in den dvblast ordner ausgecheckt. Beim ersten Versuch gab's folgende Meldung
Okay.... habe ich mir gedacht, also habe ich die Header aus dem Kernel in den dvblast ordner gelinkt.

Jetzt kommt das....

Anscheinend tritt hier ein Fehler auf der aus der Typ Zuweisung resultiert. Liegt das daran, das "ARM" hier einen anderen Typ benötigt als "i386" ?

Tatsächlich sollte das Problem aber ein anderes sein:
Code:
 193                 struct ip_mreq_source imr;
 194                 imr.imr_multiaddr = p_addr->sin_addr;
 195                 imr.imr_interface.s_addr = i_if_addr;
 196                 imr.imr_sourceaddr = p_src->sin_addr;

und aus LXR linux/include/linux/in.h
Code:
struct ip_mreq_source {
        __be32          imr_multiaddr;
        __be32          imr_interface;
        __be32          imr_sourceaddr;
};

Probiere mal:
Code:
 193                 struct ip_mreq_source imr;
 194                 imr.imr_multiaddr = p_addr->sin_addr.s_addr;
 195                 imr.imr_interface = i_if_addr;
 196                 imr.imr_sourceaddr = p_src->sin_addr.s_addr;


Der ursprüngliche Beitrag von 15:41 Uhr wurde um 15:44 Uhr ergänzt:

lieckedeeler schrieb:
Hab' ich doch :crying:.... das sind die Header des Acer Kernels mit denen ich mein zImage gebaut habe.... Ich dreh' hier echt noch durch.... :biggrin:

Und warum schreibst Du dann:
lieckedeeler schrieb:
Liegt das daran, das "ARM" hier einen anderen Typ benötigt als "i386" ?
:confused2:
 
Weil ich... wie ich eingangs schon sagte ein totaler Noob bin was C bzw. C++ angeht. Ich finde das Zeug echt sehr "kryptsich"...

Daher dachte ich mir mit meinem eingeschränkten Horizont, dass der Source-Code vielleicht i386 "optimiert" geschrieben ist, weil sicherlich die Entwicklung auch so erfolgt.... Aber wahrscheinlich wirst Du mich eines besseren belehren, und mir sowas sagen wie... "das regelt eigentlich alles der Compiler.... dem ist das egal auf welcher CPU das laufen soll solang der Programierer bei der Erstellung des Quell-Codes auf die CPU spezifischen Typ-Deklarationen geachtet hat..."

Ich danke Dir auf jedenfall für Deine Ausdauer... und probiere eben mal das o.a..

Nachtrag...

Das sieht schon gut aus, allerdings findet er schon wieder etwas nicht...
LINK dvblast
/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: crtbegin_dynamic.o: No such file: No such file or directory
collect2: ld returned 1 exit status
make: *** [dvblast] Fehler 1

Die Datei die er sucht liegt in

/root/android-ndk-r8b/platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o

Muss ich das wieder als export irgendwie mitgeben?
 
Zuletzt bearbeitet von einem Moderator:
lieckedeeler schrieb:
Weil ich... wie ich eingangs schon sagte ein totaler Noob bin was C bzw. C++ angeht. Ich finde das Zeug echt sehr "kryptsich"...

Daher dachte ich mir mit meinem eingeschränkten Horizont, dass der Source-Code vielleicht i386 "optimiert" geschrieben ist, weil sicherlich die Entwicklung auch so erfolgt.... Aber wahrscheinlich wirst Du mich eines besseren belehren, und mir sowas sagen wie... "das regelt eigentlich alles der Compiler.... dem ist das egal auf welcher CPU das laufen soll solang der Programierer bei der Erstellung des Quell-Codes auf die CPU spezifischen Typ-Deklarationen geachtet hat..."

Ich danke Dir auf jedenfall für Deine Ausdauer... und probiere eben mal das o.a..

Nachtrag...

Das sieht schon gut aus, allerdings findet er schon wieder etwas nicht...


Die Datei die er sucht liegt in



Muss ich das wieder als export irgendwie mitgeben?

Würde ich denken. Ehrlich gesagt vermute ich, dass es eine globale Einstellung so in der Art NDK_HOME=/root/android-ndk-r8b geben müsste.

Hast Du schon mal
Code:
export ANDROID_NDK=/path/to/android-ndk
probiert? Damit könntest Du eventuell auch auf CPATH verzichten...
 
Hab's gerade mal probiert....

klappt immer noch nicht.... gleiche Fehlermeldung wie eben

make CROSS=arm-linux-androideabi-
LINK dvblast
/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: crtbegin_dynamic.o: No such file: No such file or directory
collect2: ld returned 1 exit status
make: *** [dvblast] Fehler 1
So sieht mein env aus....

....
CPATH=/root/android-ndk-r8b/platforms/android-8/arch-arm/usr/include/:
...
PATH=/root/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root/build_src/dvblast
...
ANDROID_NDK=/root/android-ndk-r8b/:
...

Muss ich noch den "LIBRARY_PATH" setzen...?
 
Zuletzt bearbeitet von einem Moderator:
@jpo234

ich gebe Dir ein fettes, fettes Dankeschön für Deine Ausdauer und Geduld... So wie es aussieht, bin ich jedoch zu dumm um das ans laufen zu bekommen...
Hätte ich mir die ganze Mühe nicht machen brauchen mit einem eigenen Kernel :biggrin:. Was nützt mir DVB-Support, wenn ich keine App habe die das wiedergeben kann... Nunja.... nochmals ganz, ganz vielen Dank für die Unterstützung.... Vielleicht mache ich morgen weiter, wenn ich nicht mehr so niedergeschlagen bin. Schönen Abend noch....
 
lieckedeeler schrieb:
@jpo234

ich gebe Dir ein fettes, fettes Dankeschön für Deine Ausdauer und Geduld... So wie es aussieht, bin ich jedoch zu dumm um das ans laufen zu bekommen...
Hätte ich mir die ganze Mühe nicht machen brauchen mit einem eigenen Kernel :biggrin:. Was nützt mir DVB-Support, wenn ich keine App habe die das wiedergeben kann... Nunja.... nochmals ganz, ganz vielen Dank für die Unterstützung.... Vielleicht mache ich morgen weiter, wenn ich nicht mehr so niedergeschlagen bin. Schönen Abend noch....

Das kann nicht so schwer sein. Ich sehe mir das mal selbst an.
 
@jpo234

Das kann nicht so schwer sein.
Hab' ich auch gedacht...

Ich sehe mir das mal selbst an.
Danke!!


Hab mich nach dem Abendessen auch nochmal dran gesetzt... Dies hier gefunden

Discuss developing native code for the Google Android operating system. ()

Hier bin ich dann über
Really, the best thing to do is to use make-standalone-toolchain.sh instead of trying to use the binaries directly from $NDK/toolchains/arm-linux-androideabi-4.4.3/.../
gestolpert.

Also bin ich nochmal mit einer standalone-toolchain "arm-linux-androideabi-4.4.3" bei Null angefangen... Bisher ohne Erfolg....
 
lieckedeeler schrieb:
@jpo234


Hab' ich auch gedacht...


Danke!!


Hab mich nach dem Abendessen auch nochmal dran gesetzt... Dies hier gefunden

Discuss developing native code for the Google Android operating system. ()

Hier bin ich dann über
gestolpert.

Also bin ich nochmal mit einer standalone-toolchain "arm-linux-androideabi-4.4.3" bei Null angefangen... Bisher ohne Erfolg....

Also ich habe folgendes gemacht:
Code:
jpo@linux-f1l2:~/Android> tar jxf /home/jpo/Downloads/android-ndk-r8b-linux-x86.tar.bz2
jpo@linux-f1l2:~/Android> ls                                                                                                                                                                    
android-ndk-r8b  Hello  
jpo@linux-f1l2:~/Android> android-ndk-r8b/build/tools/make-standalone-toolchain.sh  --platform=android-14  --install-dir=/home/jpo/Android/ARM-Toolchain
Auto-config: --toolchain=arm-linux-androideabi-4.6                                                                                                                                              
Copying prebuilt binaries...                                                                                                                                                                    
Copying sysroot headers and libraries...                                                                                                                                                        
Copying libstdc++ headers and libraries...                                                                                                                                                      
Copying files to: /home/jpo/Android/ARM-Toolchain                                                                                                                                               
Cleaning up...
Done.
jpo@linux-f1l2:~/Android> export PATH=$PATH:/home/jpo/Android/ARM-Toolchain
jpo@linux-f1l2:~/Android> cd Hello/           
jpo@linux-f1l2:~/Android/Hello> arm-linux-androideabi-gcc -o hello hello.c 
jpo@linux-f1l2:~/Android/Hello> file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
jpo@linux-f1l2:~/Android/Hello> exit
Damit wäre schon mal ein Hello World! gebaut.

OK, mit
Code:
CFLAGS="-I/home/jpo/Android/include/include  -idirafter /home/jpo/Android/kernel/include" CC="arm-linux-androideabi-gcc" make V=1
hat's geklappt:
Code:
jpo@linux-f1l2:~/Android/dvblast> file dvblast dvblastctl
dvblast:    ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
dvblastctl: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

Binaries:
dvblast.tar.xz - https://docs.google.com/open?id=0ByFGz3ZH6JcYUVFRZG5iU2ljOTg
 
Zuletzt bearbeitet:
@jpo234

vielen, vielen Dank.... ich werde das gleich heute Abend testen, und berichten. Danke nochmal....
 

Ähnliche Themen

K
Antworten
3
Aufrufe
366
mezzothunder
mezzothunder
M
Antworten
4
Aufrufe
1.326
swa00
swa00
5
Antworten
0
Aufrufe
1.300
586920
5
Zurück
Oben Unten