重命名Android的共享对象扩展

重命名Android的共享对象扩展,android,android-ndk,openssl,java-native-interface,shared-libraries,Android,Android Ndk,Openssl,Java Native Interface,Shared Libraries,我已经为Android构建了OpenSSL。这生成了一个so,扩展名为.so.1.0.0,以及一个符号链接,扩展名为.so。这当然是Android的一个问题,因为它希望所有共享库都有这种格式的扩展 (此外,我还有一些其他的预构建库,它们需要在名为libssl.so的文件中使用。) 因此,我需要一个以.so结尾的库,以及依赖它链接到扩展名为.so的文件的所有库。此处的OpenSSL说明:建议将文件重命名为libssl.so。我已经做到了 但是,当我尝试使用ajb工具()构建我自己的库(也需要ope

我已经为Android构建了OpenSSL。这生成了一个so,扩展名为.so.1.0.0,以及一个符号链接,扩展名为.so。这当然是Android的一个问题,因为它希望所有共享库都有这种格式的扩展

(此外,我还有一些其他的预构建库,它们需要在名为libssl.so的文件中使用。)

因此,我需要一个以.so结尾的库,以及依赖它链接到扩展名为.so的文件的所有库。此处的OpenSSL说明:建议将文件重命名为libssl.so。我已经做到了

但是,当我尝试使用ajb工具()构建我自己的库(也需要openSSL)时,库仍然有soname“libssl.so.1.0.0”,使用
-lopenssl
它生成共享对象,显然需要libssl.so.1.0.0格式的库文件,这是一个在构建时不再存在的文件。在运行时,Android应用程序抱怨找不到此文件

我尝试将
-l:libssl.so
放入我的库的makefile中,但没有成功
readelf-d
仍然报告我的库需要libssl.so.1.0.0


有没有办法强制库链接到特定的文件名。或者我必须以这样一种方式构建OpenSSL:它生成一个将其soname设置为“.so”的库?

最后,我手动编辑了OpenSSL的
Makefile.shared
,并在共享库构建中修改了
-soname
参数以省略版本名。这起作用了。尽管我确信可以找到一个更优雅的解决方案。

正如您所知,Android需要一个Universion库。
我的建议是编写一个Android.mk并使用ndk构建。

示例:请参见libusbx()

注意libssl.so在Android应用程序中很难使用,因为在典型的Android发行版中,
/system/lib
目录中存在具有此名称的文件,并且此目录优先于应用程序的私有lib目录。一方面,这可能意味着您可以依赖系统库,而不必浪费时间来构建和维护OpenSSL。但是,如果您的应用程序需要一些系统库中没有的功能或修复,则必须重命名库,并确保所有引用都指向新重命名的库
libssl.1.0.0。因此
将是一个选项。我成功构建了一个版本较少的
libcrypto.so
,请参阅.github链接页面未找到