【问题标题】:can't load native library for csipsimple when .so files are copied?复制 .so 文件时无法为 csipsimple 加载本机库?
【发布时间】:2016-08-31 20:20:46
【问题描述】:

我正在尝试使用 compileSdkVersion 21 buildToolsVersion "21.1.2" 将已经存在的旧 libpjsipjni.so 文件复制到我的 jniLibs android studio 代码,并在复制和编译时显示 libraryjava.lang.UnsatisfiedLinkError:dlopenfailed:cannot locate symbol"...

如何使其兼容,尤其是在 android M (6.0) 中,请帮助我解决这个问题。

【问题讨论】:

  • so 文件应该在 armeabi 或其他目录下。哪个符号无法定位?您是否为 NDK 构建指定 app_platform?
  • 是的 .so 文件位于 armeabi/armeabi v-7a 目录下,我没有使用 .so 文件库构建本机代码 java.lang.UnsatisfiedLinkError:dlopenfailed:cannot locate symbol "BN_nist_mod_521" 引用"/data/app/com.myapp/lib/arm/libpjsinjni.so
  • 这个符号属于 openssl 库。如果您的库使用动态链接到预装的 openssl,它可能无法在 M 或更高版本上运行:ssl 的内置实现在 Android 中已更改。此外,新的构建系统禁止链接系统 SO 文件(与 NDK 捆绑的“官方”文件除外)。但是您可以自己构建 openssl 并将其与您的应用程序捆绑在一起。请注意,Play 商店会验证 openssl 的捆绑实现(针对过时版本的 openssl 的漏洞利用过多)。

标签: android-studio java-native-interface shared-libraries native pjsip


【解决方案1】:

你可能已经被https://trac.pjsip.org/repos/wiki/Getting-Started/Android#IssuewithusingOpenSSLonAndroidM 击中了。解决方案是自己构建 openssl 并将其与您的应用程序捆绑在一起。您可以使用预构建的库来试试运气(请参阅https://github.com/emileb/OpenSSL-for-Android-Prebuilt/tree/master/openssl-1.0.2)。请注意,Play 商店会验证 openssl 的捆绑实现(针对过时版本的 openssl 的漏洞利用过多)。

【讨论】:

  • 我没有构建原生文件的经验,您能详细说明一下如何构建它吗?
  • 我相信你应该尝试一下预建库
猜你喜欢
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 2015-07-26
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
相关资源
最近更新 更多