Das NDK ist im Grunde eine Implementierung des Native Java-Schnittstelle für Android. Es gibt Ihnen GCC 4.2.1 (der vollständige Satz von Werkzeugen, soweit ich sagen kann) mit Ziel arm-eabi
. Ob der resultierende Code auf einem iPhone oder anderen Geräten laufen würde, weiß ich nicht; ich habe nie für das iPhone programmiert. Hier ist was file
über etwas zu sagen hat, das ich mit dem NDK gebaut habe, damit Sie vielleicht vergleichen können:
libpuzzles.so: ELF 32-bit LSB shared object, ARM, Version 1 (SYSV), dynamisch gelinkt, nicht gestrippt
( strip
ist enthalten; ich habe es hier nur nicht ausgeführt). Hier ist gcc -v
o g++ -v
(sie sind identisch):
Integrierte Spezifikationen verwenden.
Ziel: arm-eabi
Konfiguriert mit: /opt/digit/Android/git/Android-ndk/out/arm-eabi-4.2.1/toolchain/src/gcc-4.2.1/configure --prefix=/opt/digit/Android/git/Android-ndk/build/prebuilt/linux-x86/arm-eabi-4.2.1 --target=arm-eabi --host=x86 _
64-unknown-linux-gnu --build=x86 _
64-unknown-linux-gnu --enable-languages=c, c++ --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --with-float=soft - -with-fpu=vfp --with-arch=armv5te --enable-target-optspace --with-abi=aapcs --disable-nls --prefix=/opt/digit/Android/git/Android-ndk/build/prebuilt/linux-x86/arm-eabi-4. 2.1 --with-sysroot=/opt/digit/Android/git/Android-ndk/build/platforms/cupcake/arch-arm --program-transform-name=s,^,arm-eabi-,
Gewindemodell: einfach
gcc Version 4.2.1
Vorausgesetzt, der Code läuft, ist die Verwaltung auf API-Ebene ein separates und interessantes Thema. Bei Android können Sie nativen Code nur über die JNI-API aufrufen. Ich bin mit dem iPhone-Ansatz nicht vertraut, aber ich weiß, dass es sich nicht um Java handelt, also würde ich vermuten, dass es sich eher um Standard Dynamic Linking oder dlopen()
? Was ich meine ist, Sie müssten entweder Ihre JNI-Funktionen (z.B.. Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...)
mit dem Aufruf von etwas, das keine JVM ist (haben Sie Ihr iPhone-Code fake eine JNI_Env zum Beispiel?) oder, viel weniger schrecklich, starten Sie durch die Bereitstellung einer nativen API geeignet für iPhone und dann eine JNI-Wrapper, die nicht-JNI-Plattformen sicher ignorieren können, die ich sammeln ist ein gemeinsamer Ansatz für diese Art von Dingen. Hoffentlich hilft das.