不满意的链接错误 - 找不到库

时间:2011-06-17 22:40:26

标签: android c android-ndk

我正在尝试将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)

error

编译完美,很好。

这也是我的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文件夹中,但是我已经在其他多个地方尝试了它,但它仍然失败了。有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

试试这些变化:

LOCAL_PATH := $(call my-dir)

#添加预建的libjnigraphics

包括$(CLEAR_VARS)

LOCAL_MODULE:= graphics-prebuilt

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:= graphics-prebuilt

LOCAL_LDLIBS + = -llog

包括$(BUILD_SHARED_LIBRARY)