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,但也不要炒,为什么会发生这种情况?我该怎么办?