Android位图本机代码 - 链接问题

Ani*_*ole 22 android bitmap android-ndk

编译我的应用程序时遇到问题,这是受位图等离子的启发.我在打电话

    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);
Run Code Online (Sandbox Code Playgroud)

我在源文件中包含了android/bitmap.h.我在ubuntu 10.10上使用android-ndk-r5b和sdk-9.

我收到了一个错误

 /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"
Run Code Online (Sandbox Code Playgroud)

问题出在调试代码上.但是问题是什么?任何人都有答案吗?

Ani*_*ole 42

经过简短的研究,我知道我需要添加

`LOCAL_LDFLAGS += -ljnigraphics` 
Run Code Online (Sandbox Code Playgroud)

在Android.mk文件中.


小智 19

我通过在文件"CMakeList.txt"中添加"-ljnigraphics"行来解决:

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

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )
Run Code Online (Sandbox Code Playgroud)


Cur*_*vus 7

如果使用Android Studio,您还需要将库添加到gradle.build文件中.

android {
    ...

    defaultConfig {
        ...

        ndk {
            ldLibs = ["android", "jnigraphics", <other ndk libraries you might need>]
            moduleName "webcam"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎gradle忽略了Android.mk文件的ndk依赖项.请参阅未定义的对"__android_log_print"的引用,特别是Stephen Kaiser对所选答案和BoredT答案的评论.