2013-03-10 10 views
5

Sto lavorando su un app che utilizza NDK (tutto quello che sto scrivendo è accaduto sia a R6B e r8d)__ANDROID__ macro improvvisamente non definito

Tutto stava funzionando bene, e ho voluto iniziare e provare il debug il mio C codice.

Ho seguito questo http://tools.android.com/recent/usingthendkplugin tutorial, ma NDK_DEBUG = 1 tag al mio comando build, improvvisamente ho iniziato a ricevere gli errori nel codice che non è andato via anche dopo la rimozione di quel tag, cambiando da Android 4.2.2 di nuovo a 2.2, cambiando l'NDK che stavo usando, o qualsiasi altra cosa a cui potessi pensare.

I problemi accade dichiarazioni ora Inside Ti piace questa

#ifdef __ANDROID__ 
some cool android code 
#else 
some pretty awesome iOS code 
#endif 

ciò che accade è che la __ANDROID__ è per qualche ragione non definisce, causando Eclipse e ndk-build per cercare di compilare il codice iOS invece che del Android

Ripristinare tutto ciò che ho fatto non sembra avere alcun effetto. Il riavvio dell'eclissi non ha funzionato. Pulizia del progetto, cancellare completamente le directory libs e obj non ha funzionato troppo ..

Qualche suggerimento?

Grazie!

EDIT:

Forse è la pena di aggiungere che l'accumulo stesso, utilizzando NDK-creazione riesce. Penso che potrebbe essere un problema di eclissi, ma anche se così, è ancora un errore e non posso avviare l'app

Inoltre, nel caso in cui, il riavvio del computer non ha funzionato neanche.

EDIT 2: Il problema esiste su un altro computer che esegue lo stesso spazio di lavoro su rete, la mia ipotesi era correlata all'area di lavoro, quindi ho provato a eliminare la cartella .metadata e ad aggiungere nuovamente il progetto.

eliminazione della cartella .metedata fisso è la 1a volta, ma dopo pochi minuti (in cui sono riuscito a costruire e gestire l'applicazione sul mio tablet) lo stesso problema è tornato, e l'eliminazione della .metadata non ha funzionato

EDIT 3:

Ancora no go.

Tuttavia, posso confermare che non si tratta di un problema specifico del progetto, poiché tutti i progetti con supporto nativo in eclissi ora lo fanno.

Altre cose che non funzionano:

  • creare un progetto vuoto, aggiungendo il supporto nativo.
  • Completamente passare a un'altra area di lavoro non collegati ed eseguire le prove di cui sopra
  • Il download nuova versione di Eclipse (Giunone), CDT & ADT (stava usando il fascio eclisse ADT)

risposta

-1

Se qualcun altro incontra questo problema:

Ho aperto lo spazio di lavoro su un altro computer (l'area di lavoro è in una cartella Dropbox) e il problema era ancora lì sull'altro computer, il che poteva significare solo un problema di area di lavoro, quindi elimino la cartella .metadata dallo spazio di lavoro.

Ho dovuto aggiungere nuovamente i progetti, ma dopo averlo fatto, tutto sembra funzionare ora.

7

Solo così si sa:

  • quando si lavora con Android.mk file (s) e ndk-build, la macro ANDROID è predefinito (vedi -DANDROID bandiera aggiuntivo C quando si costruisce con uscite verbose),
  • ma se si utilizza la Toolchain autonoma di Android, quindi invece è __ANDROID__ predefinito.

Quindi vi consiglio di utilizzare:

#if defined(ANDROID) || defined(__ANDROID__) 
    /* ... */ 
#endif 
+0

Ciao, grazie per la risposta. Sfortunatamente, farlo non ha cambiato nulla. Ancora lo stesso problema .. –

+0

Quello che ti suggerisco è di innescare uscite dettagliate con 'ndk-build V = 1' e controllare cosa sta succedendo nei tuoi comandi di compilazione, cioè è presente' -DANDROID'? – deltheil

+0

Grazie, l'ho fatto ora e '-DANDROID' è lì. Inoltre, sembra che il codice C sia compilato bene, il file della libreria '.so' è stato generato. è come se eclipse stessa non riconoscesse questi flag, perché anche se il codice c sembra avere un errore quando è visualizzato in eclissi, compila come dovrebbe –

1

Apparentemente __ANDROID__ è uno specifico GCC macro che dovrebbe definire internamente ogni volta che sono disponibili opzioni corrette. Tuttavia, poiché il controllo sulle opzioni è in gran parte delegato a NDK, non si deve fare affidamento sulla definizione della macro __ANDROID__. Il compilatore dietro NDK potrebbe non essere GCC per tutto quello che sappiamo (o cura). Quando si lavora con NDK, controllare ANDROID.

Edit: clang ora definisce anche __ANDROID__ macro