在android

时间:2016-03-09 17:23:06

标签: android android-ndk

我正在加载一个依赖libgnustl_shared.so

的ndk模块

我使用以下方式调用mylib.sognustl_shared

System.load("/data/data/package/files/libgnustl_shared.so");
System.load("/data/data/package/files/mylib.so");

来自外部包,由于产品要求(而不是来自jniLibs - loadlibrary)

它就像每个设备上的魅力一样,但是在lg g4 armv8 liba.so上找不到libgnustl_shared。它在其他armv8手机上运行良好。

怎么会发生? 有没有人知道如何以通用\ spesific方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

感谢Alex Cohn的回答

LG G4设备在system / lib64文件夹中有libstlport.so。这个lib是另一个c ++帮助程序运行时。描述于: http://developer.android.com/ndk/guides/cpp-support.html

当调用system.load()到libgnustl_shared.so时,设备从lib64调用libstlport而不是指定的路径。因为jni模块不是建立在libstlport上的,并且它在mylib内部有不同的代码。所以无法处理这种情况

溶液:

  1. 使用gnustl_static

    编译jni libs
    • 专业人士:创造一个.so并且可以被称为onces
    • 缺点:如果你有多个.so依赖于gnu,它可能会导致内存泄漏
  2. 从主应用程序的范围调用libgnustl_shared和编译库(mylib.so),而不是从外部库的范围调用。 即:

    的System.loadLibrary( “gnustl_shared”); 的System.loadLibrary( “your_native_library”);