无法找到预构建的共享库引用的符号

时间:2015-06-06 16:26:30

标签: java android c++ android-ndk java-native-interface

即使这里有很多类似的问题,我也无法解决这个问题,所以我决定发布自己的问题。 回顾一下:

  1. 我将我的库编译为预建的共享库(.so)和android-cmake因为我已经在我的库中使用了cmake。在cmake中,我在gnustl_shared选项中使用了ANDROID_STL(我也尝试使用stlport_shared,但没有运气。)
  2. 我使用了原生的ndk-build编译器。这是我的Android.mk文件:

    LOCAL_PATH := $(call my-dir)
    
    ### include the lib as a prebuilt lib ###
    include $(CLEAR_VARS)
    
    LOCAL_MODULE            := libOS
    LOCAL_SRC_FILES         := libOS.so
    LOCAL_EXPORT_C_INCLUDES := /home/Dev/libOS/include \
                               /home/Dev/libOS/include/yos/os \
                               /home/Dev/yos/build-arm/generated_include
    
    include $(PREBUILT_SHARED_LIBRARY)
    
    ### build your ndk lib ###
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := hello
    LOCAL_SRC_FILES := main.cpp
    LOCAL_SHARED_LIBRARIES := gnustl_shared libOS
    
    include $(BUILD_SHARED_LIBRARY)
    

    这是我的Application.mk

    APP_ABI := armeabi-v7a
    APP_STL := gnustl_shared
    APP_MODULES := libOS hello
    APP_PLATFORM := android-19
    
  3. 应用程序编译正确,一切正常。在我称之为本机功能的那一刻,通过向我扔下以下内容,它变得疯狂:

    java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZSt24__throw_out_of_range_fmtPKcz" referenced by "libOS.so"...
    
  4. 此外,这是我的MainActivity.java

    的片段
    static{
        // System.loadLibrary("stlport_shared");
        System.loadLibrary("gnustl_shared");
        System.loadLibrary("libOS");
        System.loadLibrary("hello");
    }
    
    public native String hello();
    

    由于我真的不明白该怎么做,我真的很乐意帮忙!我也尝试过类似的问题,例如android ndk UnsatisfiedLinkError when using a prebuilt shared library,但现在没有运气。

    提前感谢您的帮助!

0 个答案:

没有答案