Android - UnsatisfiedLinkError:加载libQt5Core.so时出现未知故障

时间:2014-01-28 16:00:00

标签: android android-ndk unsatisfiedlinkerror qtcore

这是我第一次决定写这篇文章,但我很长时间成功使用了stackoverflow,感谢那些花时间帮助别人的人! :)

现在,我还没有找到关于此的信息,我正在尝试使用在我的Android应用程序中使用Qt的库。问题是我无法加载libQt5Core.so。运行Android时会抛出 unsatisfiedLinkError:unknown failure 。 我试图以两种方式加载它 第一个,拥有自己的Android.mk:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Qt5Core
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libQt5Core.so
LOCAL_EXPORT_C_INCLUDES :=  $(LOCAL_PATH)/include \
                            $(LOCAL_PATH)/include/QtCore
include $(PREBUILT_SHARED_LIBRARY)

第二个,手动将其添加到lib目录。

我以这种方式从Native.java文件加载库:

System.loadLibrary("gnustl_shared");
System.loadLibrary("Qt5Core");
System.loadLibrary("mysharedlibray");
System.loadLibrary("thewholelibrary");

mysharedlibrary 有一个Makefile,它是使用Qt的库。 整个库包含jni代码和mysharedlibrary,我用ndk-build创建它。

我从 Necessitas 包中获得了 libQt5Core.so ,我想我可以从 Necessitas 系统中使用它。

我也想在Qt“内部”创建一个“独立的共享库”mysharedlibrary(因为我在Android中没有使用Qt的jt“但它不允许我这样做。

非常感谢!

2 个答案:

答案 0 :(得分:1)

要在Android项目中加载libQt5Core.so,您应该将依赖项添加到QtAndroid-bundled.jar。您可以在jar目录下的Qt安装目录中找到该文件。完成此步骤后,您可以在不System.loadLibrary("Qt5Core");的情况下致电UnsatisfiedLinkError

原因:QtCore的JNI_OnLoad在启动时会加载一个名为QtNative的活动,如果找不到则会返回JNI_ERRQtNative中定义了QtAndroid-bundled.jar。我在这里说道:https://stackoverflow.com/a/25856689/1091536

答案 1 :(得分:-1)

我找到了一个解决方案:

static {
    try {
        System.loadLibrary("gnustl_shared");
        System.loadLibrary("Qt5Core");
    } 
    catch( UnsatisfiedLinkError e ) {
        System.err.println("Native code library failed to load.\n" + e);
    }
    System.loadLibrary("mysharedlibray");
    System.loadLibrary("thewholelibrary");
}

如果您的图书馆使用Qt,但只在其内部工作。