2011-02-08 19 views
18

ho un problema quando si compila la mia applicazione, che si ispira da bitmap-plasma. Ho chiamatoAndroid bitmap codice nativo - che collega problema

if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) { 
    LOGE("AndroidBitmap_getInfo() failed ! error=%d", ret); 
    return; 
} 

if (info.format != ANDROID_BITMAP_FORMAT_RGB_565) { 
    LOGE("Bitmap format is not RGB_565 !"); 
    return; 
} 

if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) { 
    LOGE("AndroidBitmap_lockPixels() failed ! error=%d", ret); 
} 

     /*****code here***********/ 
AndroidBitmap_unlockPixels(env, bitmap); 

Ho incluso Android/bitmap.h nel mio file di origine. Sto usando android-NDK-R5B e sdk-9 su Ubuntu 10.10.

sto ottenendo un errore

/home/user5432/workspace/bitmapproj/obj/local/armeabi/objs-debug/mybitmap.o : In function Java_com_example_plasma_PlasmaView_renderPlasma 
"undefined reference to AndroidBitmap_getInfo" 
"undefined reference to AndroidBitmap_lockPixels" 
"undefined reference to AndroidBitmap_unlockPixels" 

Il problema è con il codice di debug. Ma qual è il problema? Qualcuno può avere una risposta?

risposta

34

Dopo una breve ricerca ho avuto modo di sapere che ho bisogno di aggiungere

`LOCAL_LDFLAGS += -ljnigraphics` 

nel file di Android.mk.

+0

dove hai preso da? c'è una lista di tali librerie che possiamo ottenere per risolvere tali problemi con altre funzioni sconosciute? –

+0

Basta cercare su android-ndk - */platforms/android - */arch - */usr/lib e troverai le librerie alle quali puoi collegarti. – florentbuisson

+0

Si noti che questa linea deve venire prima di qualsiasi occorrenze di includere $ (BUILD_SHARED_LIBRARY) nel file Android.mk. Quasi mi fa piangere per pensare quanto tempo mi ci è voluto per incappare in quello ... – iforce2d

7

Se si utilizza Android Studio, è necessario aggiungere la libreria al file gradle.build pure.

android { 
    ... 

    defaultConfig { 
     ... 

     ndk { 
      ldLibs = ["android", "jnigraphics", <other ndk libraries you might need>] 
      moduleName "webcam" 
     } 
    } 
} 

Sembra che gradle ignori il file Android.mk per le dipendenze ndk. Vedere undefined reference to `__android_log_print', in particolare il commento di Stephen Kaiser alla risposta selezionata e la risposta di BoredT.

9

Ho risolto aggiungendo la riga "-ljnigraphics" nel file "CMakeList.txt":

"target_link_libraries(# Specifies the target library. 
         native-lib 
         -ljnigraphics 

         # Links the target library to the log library 
         # included in the NDK. 
         ${log-lib}) 
+0

ha lavorato per me, ma questa soluzione funziona solo in Android 2.2+ Studio –

Problemi correlati