【问题标题】:Unsatisfied Link Error - Could not find Library不满意的链接错误 - 找不到库
【发布时间】:2011-06-17 22:40:26
【问题描述】:

我正在尝试将 libjnigraphics.so 预构建库加载到我的项目中,但是当我部署应用程序时,我收到此错误:

06-17 22:35:28.741: INFO/dalvikvm(298): Unable to dlopen(/data/data/com.foo/lib/libndkfoo.so): Cannot load library: link_image[1721]:    29 could not load needed library 'libjnigraphics.so' for 'libndkfoo.so' (load_library[1051]: Library 'libjnigraphics.so' not found)

编译完美,很好。

这也是我的 Android.mk:

LOCAL_PATH := $(call my-dir)

# Add prebuilt libjnigraphics
include $(CLEAR_VARS)

LOCAL_MODULE := libjnigraphics
LOCAL_SRC_FILES := libjnigraphics.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

# Here we give our module name and source file(s)
LOCAL_MODULE    := ndkfoo
LOCAL_SRC_FILES := ndkfoo.c
LOCAL_SHARED_LIBRARY := libjnigraphics
#LOCAL_LDLIBS += -libjnigraphics
LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY)

我需要放置 libjnigraphics.so 的特殊位置吗?现在我将它放在 jni 文件夹中,但是我已经在其他多个地方尝试过它仍然失败。有什么帮助吗?

【问题讨论】:

  • 您是否查看了生成的 APK 以确保其中包含文件?您也可以尝试将它们放在“libs”(或 ARMv7 代码的“armeabi-v7a”)下的“armeabi”目录中 - 这是我总是放置本机库的地方,但我不确定这是否是因为构建环境或执行环境。
  • 我试过将它们放入 armeabi 中,但没有骰子。我会检查 APK,但我打赌它可能不存在。另外,为什么会有反对票和投票结束?这个问题有什么问题?
  • 你不应该把它放到你的项目中。该库将在目标设备中。只需使用 -libjnigraphics。
  • 目标是让它在 2.1 设备上运行而无需访问 jnigraphics,这样我就可以通过 LoadBitmap 函数加载位图,否则无法访问。 stackoverflow.com/questions/4833572/…

标签: android c android-ndk


【解决方案1】:

设备必须是running Foyo(Android 2.2,目标平台 android-8)才能使用 libjnigraphics.so。 SDK 或项目目录中的内容无关紧要,此库是设备系统库的一部分。

您可以使用带有 android-8 的 NDK 编译您的代码,但是当您侧载 apk 并且您的设备恰好运行 2.1 或更早版本时,它会给出链接时错误。

SO question 有一个解决方法,但不应该依赖它,它会在某些设备上崩溃。这是 post on the android-ndk group 解释问题。

【讨论】:

  • 我意识到这一点,我的目标是根据这个问题将 jnigraphics 添加到我的项目中:stackoverflow.com/questions/4833572/… 我稍后会更多地研究解决方法,尽管我同意不应该依赖它。如果我无法调用 bitmap.h 文件,你会如何建议将位图加载到本机代码中?
  • 取决于它的用途:复制位图的数据数组,使用 Open GL 将位图作为纹理,用 Java 重写位图更改代码,或者放弃对
  • 正如 android NDK 的技术主管 David Turner 在 android-ndk 邮件列表线程中所说:“[高性能图形] 在 Eclair 上根本不可能。你的技巧可能是最好的方法这样做,但不是 100% 安全的。”
【解决方案2】:

试试这些改变:

LOCAL_PATH := $(call my-dir)

# 添加预编译的 libjnigraphics

包括 $(CLEAR_VARS)

LOCAL_MODULE := 图形预建

LOCAL_SRC_FILES := libjnigraphics.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

包括 $(PREBUILT_SHARED_LIBRARY)

包括 $(CLEAR_VARS)

# Here we give our module name and source file(s)

LOCAL_MODULE := ndkfoo

LOCAL_SRC_FILES := ndkfoo.c

LOCAL_SHARED_LIBRARY := 图形预建

LOCAL_LDLIBS += -llog

包括 $(BUILD_SHARED_LIBRARY)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-22
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多