2010-08-09 7 views
3

Actuellement, j'essaie de compiler du code natif pour Android. Le code provient du port OpenCV pour Android. J'ai collé tout le code correctement dans mon projet et édité mes fichiers make en conséquence. Quand je mets android: debuggable à false tout fonctionne très bien et je reçois ma bibliothèque native. Quand j'essaie pendant que android: debuggable est défini sur true, j'obtiens une erreur. Voici une partie du journal:Erreur de compilateur interne lors de la compilation du code Android natif

Compile++ thumb: cxcore <= AR_Still_Image/jni/cxcore/src/cxutils.cpp 
AR_Still_Image/jni/cxcore/src/cxutils.cpp: In function 'void icvSort16u(ushort*, size_t, int)': 
AR_Still_Image/jni/cxcore/src/cxutils.cpp:987: internal compiler error: in reload, at reload1.c:1173 
Please submit a full bug report, 
with preprocessed source if appropriate. 
See <http://gcc.gnu.org/bugs.html> for instructions. 
make: *** [AR_Still_Image/obj/local/armeabi/objs/cxcore/cxcore/src/cxutils.o] Error 1 

D'après ce que j'ai trouvé sur Internet, cela est dû au niveau d'optimisation de la compilation. Tant que le code n'est pas compilé de sorte qu'il est débogable par la suite, tout devrait bien se passer.

Maintenant, il est apparemment possible d'éviter cela en réglant APP-OPTIM := release dans Application.mk ou en ajoutant -O2 à LOCAL_CFLAGS. J'ai essayé les deux et toujours je reçois cette erreur. À l'heure actuelle, je ne m'intéresse pas vraiment au débogage de mon code natif, mais j'aimerais que le débogage de base soit activé. Et je ne veux pas continuer à changer Android: débuggable dans mon manifeste chaque fois que je veux compiler. Je ne suis même pas sûr que ce soit correct du tout si je mets juste android: debuggable à faux pré compiler et à la compilation vrai post, mais je suis sûr que je l'oublierai tous les deux cours.

Est-ce que quelqu'un a rencontré un problème similaire ou quelqu'un sait-il comment résoudre ce problème? Ce serait d'une grande aide.

Répondre

2

Une solution de contournement consiste à pré-générer le code provoquant l'erreur du compilateur avec le débogage désactivé. Ensuite, apportez-le comme préconstruit. Ensuite, vous pouvez construire le reste avec le débogage. J'ai eu ce problème (ou similaire), et posté sur le Google Group.

Référencez la section Pré-construction du Guide de développement.

+0

Je peux confirmer que mon intrinsèque NEON compile correctement avec ndk-build NDK_DEBUG = 0. Dans mon cas plutôt que d'utiliser préconstruit, il était plus facile de # définir ANDROID_GCC_NEON_BUG! NDEBUG, et j'envelopper chaque définition de fonction avec l'équivalent de #if CPU_HAS_NEON &&! ANDROID_GCC_NEON_BUG ... –

+0

BTW, ma solution fonctionne sur ndk r7b (gcc 4.4. X). Voici quelques informations supplémentaires, et l'idée alléchante que gcc 4.6.2 a le correctif en amont. http://grokbase.com/t/gg/android-ndk/11bw65h5sf/internal-compiler-error-in-reload-cse-simplify-operands-at-postreload-c-396-with-neon-intrinsics-in- ndk-7 –

Questions connexes