2

我需要在我的应用程序中运行比操作系统中的更新版本的 openssl。我能够修补和 android 源以编译更新版本,然后提取共享库以在我的应用程序中使用。

然后,我能够编译并链接我的本机代码,该代码仅需要较新版本的 openssl 中的函数与我的新共享库(较新的 openssl 的补丁有效)。

我还能够创建一些按预期工作的 jni 函数,但是一旦我添加了仅在应用程序本地较新的 openssl 共享库中的函数,我就会得到一个不满意的链接错误。

我的假设是 libcrypto 和 libssl 的系统版本覆盖了我在 /libs/armeabi/libcrypto.so 和 /libs/armeabi/libssl.so 中的本地版本 .... 我该如何解决这个问题?

4

2 回答 2

4

该系统已经附带了一个名为 的库libcrypto,它将在您的库之前被选中。最简单的解决方案是给你的库一个不同的名字,并在你的System.loadLibrary(...)调用中使用它。

更新

正如您所指出的,您将需要使用新名称重建库,而不仅仅是重命名文件。

于 2012-06-12T21:05:53.203 回答
0

是的,JNI 正在获取系统版本。它根本没有使用你的补丁版本。在独立 JVM 上,您会说-Djava.library.path=/libs/armeabi或修改 environment variable LD_LIBRARY_PATH。在 Android 上,我想您可以查找系统属性java.library.path并将您的库放在某个已知位置(但在系统版本所在的文件夹之前)或实际修改属性 - 将路径添加到本地版本。我确实有一些使用 Android 的经验,但不是专门使用 NDK。

于 2012-06-12T19:54:17.870 回答