在android JNI应用程序中调用系统库时无法定位符号

时间:2014-11-14 03:00:26

标签: android dll java-native-interface

ps:这个问题已经解决了。事实上,它是由于我自己的粗心造成的。我在一个平台下编译库,然后在另一个平台上使用它。所以最后,里面没有一些必需的库。所以开玩笑!

我是Android开发的初学者。现在,我想重新编译项目(droidvncserver)并在MTK平台上运行此应用程序。在此应用程序中,JNI应用程序用于调用名为 libdvnc_flinger_sdk17.so 的动态库,该库在MTK的AOSP中编译。所以在JNI中,用这样的dlopen函数调用这个库:

flinger_lib = dlopen(lib_name, RTLD_NOW);

libvnc_flinger_sdk17.so 调用一些系统库,例如 libui.so,libgui.so,libbinder.so < / strong>等Android.mk曾经在这里写 libvnc_flinger_sdk17.so

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES = \
									flinger.cpp

#LOCAL_CFLAGS += -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)

LOCAL_C_INCLUDES +=	\
										$(LOCAL_PATH) \
										$(LOCAL_PATH)/..

LOCAL_PRELINK_MODULE:=false #override prelink map
LOCAL_MODULE:= libdvnc_flinger_sdk$(PLATFORM_SDK_VERSION)
LOCAL_MODULE_TAGS:= optional
LOCAL_MODULE_PATH := $(LOCAL_PATH)/../libs/$(TARGET_CPU_ABI)

LOCAL_SHARED_LIBRARIES := libgui libui libbinder libcutils libutils libskia

include $(BUILD_SHARED_LIBRARY)

事实上,整个JNI应用程序是作为名为 libvncserver.so 的可执行程序生成的。在java代码中,我启动另一个shell进程来运行 libvncserver.so 。直到现在问题来了,当我在手机中运行整个项目作为android应用程序时,logcat报告错误: 错误字符串:dlopen失败:无法找到“libdvnc_flinger_sdk17.so”引用的符号“_ZN7android18getPixelFormatInfoEiPNS_15PixelFormatInfoE”

我用命令“objdump -s libui.so”搜索了函数getPixelFormatInfo,结果表明它存在于这个系统库中。我也在手机中发现这个库也存在于/ system / lib目录中。 还有,我已将这个库推入/data/data/org.naiops.vnc/lib,但也不要炒,为什么会发生这种情况?我该怎么办?

0 个答案:

没有答案