【问题标题】:Android bitmap native code - linking problemAndroid位图本机代码-链接问题
【发布时间】:2011-06-23 18:44:24
【问题描述】:

我在编译我的应用程序时遇到了一个问题,该应用程序的灵感来自 bitmap-plasma。我在打电话

    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);

我在源文件中包含了 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"

问题在于调试代码。但问题是什么?有人可以回答吗?

【问题讨论】:

    标签: android bitmap android-ndk


    【解决方案1】:

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

    `LOCAL_LDFLAGS += -ljnigraphics` 
    

    在 Android.mk 文件中。

    【讨论】:

    • 你从哪里得到的?是否有此类库的列表,我们可以使用这些库来解决其他未知函数的此类问题?
    • 只需查看 android-ndk-*/platforms/android-*/arch-*/usr/lib,您就会发现可以链接到的库。
    • 请注意,此行需要出现在您的 Android.mk 文件中任何出现的 include $(BUILD_SHARED_LIBRARY) 之前。想到我花了多长时间才偶然发现它,几乎让我哭泣......
    • 谢谢。 007来救援!我还使用了一个示例(gles2)并从位图等离子中获取了位图部分。从现在开始,我还记下了#include Android.mk 文件! ;)
    【解决方案2】:

    我已通过在文件“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} )
    

    【讨论】:

    • 对我有用,但此解决方案仅适用于 Android Studio 2.2+
    【解决方案3】:

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

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

    似乎 gradle 忽略了 ndk 依赖项的 Android.mk 文件。请参阅undefined reference to `__android_log_print',尤其是 Stephen Kaiser 对所选答案的评论和 BoredT 的答案。

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多