2010-12-02 3 views
2

Je suis en train de construire un fichier C++ pour utiliser dans mon application Android sur JNI. Je construis dans Windows en utilisant Cygwin. Je suis complètement nouveau à cela et je ne sais pas ce que je fais.Compiling code C++ avec Cygwin pour JNI (Android NDK)

est ici une partie de la sortie:

$ g++ -c test_wrap.cxx -I"C:\dev\android-ndk-r4b\build\platforms\android-4\arch-arm\usr\include" -I./include 
In file included from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/sys/_types.h:40, 
       from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/stdint.h:32, 
       from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/sys/types.h:34, 
       from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/strings.h:42, 
       from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/stdlib.h:42, 
       from test_wrap.cxx:160: 
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:44: error: conflicting declaration 'typedef long unsigned int size_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:213: error: 'size_t' has a previous declaration as `typedef unsigned int size_t' 
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:44: error: declaration of `typedef long unsigned int size_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:213: error: conflicts with previous declaration `typedef unsigned int size_t' 
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:44: error: declaration of `typedef long unsigned int size_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:213: error: conflicts with previous declaration `typedef unsigned int size_t' 
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:46: error: conflicting declaration 'typedef long int ptrdiff_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:151: error: 'ptrdiff_t' has a previous declaration as `typedef int ptrdiff_t' 
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:46: error: declaration of `typedef long int ptrdiff_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:151: error: conflicts with previous declaration `typedef int ptrdiff_t' 
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:46: error: declaration of `typedef long int ptrdiff_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:151: error: conflicts with previous declaration `typedef int ptrdiff_t' 

Pouvez-vous s'il vous plaît me donner un coup de main?

Emmanuel

Répondre

0

La réponse était simplement de créer un fichier Android.mk et l'utilisation la commande ndk-build.

0

Je ne suis pas un C/C l'expert du tout, mais il me semble que vous essayez de compiler pour Arm avec un compilateur ciblant i686. Il ne suffit pas d'inclure les fichiers d'en-tête que vous voulez pour dire à GCC de cibler une arche, vous avez besoin d'un compilateur croisé.

http://wiki.osdev.org/GCC_Cross-Compiler

1

Les applications construites dans l'environnement Cygwin supposent que l'application exécutera sur Windows avec la DLL Cygwin disponible. Comme yock l'a déclaré, vous devez configurer un compilateur croisé ciblé pour le système d'exploitation Android.

0

Qu'est-ce que vous essayez de faire avec Cygwin ne fonctionnera pas pour les raisons énoncées dans la réponse de David Harrris.

Vous pouvez obtenir le compilateur croisé (correct) qui fonctionne sous Windows here. Il existe également un compilateur C/C++ inclus dans le NDK Android, que vous pouvez trouver. here

0

Vous devez utiliser la version d'androis gcc pour compiler votre source. Utilisation de ndk-build et des outils de construction NDK.

Si vous voulez juste pour se débarrasser de l'erreur « déjà défini » undefine abord pour vous assurer que votre version est utilisée se:

#undef size_t 
#undef ptrdiff_t 
Questions connexes