无法在android应用程序中使用libspotify 12
我正在尝试使用NDK在我的android应用程序中加载libspotify。 我正在使用libspotify++和jlibspotify库。所有内容似乎都已加载,但当libspotify尝试加载libspotify.so.12库时,它会崩溃 我不能在android中使用符号链接 代码: 日志:无法在android应用程序中使用libspotify 12,android,android-ndk,spotify,Android,Android Ndk,Spotify,我正在尝试使用NDK在我的android应用程序中加载libspotify。 我正在使用libspotify++和jlibspotify库。所有内容似乎都已加载,但当libspotify尝试加载libspotify.so.12库时,它会崩溃 我不能在android中使用符号链接 代码: 日志: 有人知道该怎么做才能让它工作吗?看来您需要更改创建libspotify的构建过程,以获得合适的名称 最简单的方法是使用Android NDK构建系统-它将正确编译和链接库。似乎您需要更改创建libspot
有人知道该怎么做才能让它工作吗?看来您需要更改创建libspotify的构建过程,以获得合适的名称
最简单的方法是使用Android NDK构建系统-它将正确编译和链接库。似乎您需要更改创建libspotify的构建过程,以获得正确的名称
最简单的方法是使用Android NDK构建系统-它将正确编译和链接库。来自Mārtiņš的答案是正确的,它应该使用Android的NDK构建系统构建。 当无法控制库时,有一个解决方法: 而不是使用System.loadLibrary JLibSpotify加载库; 我手动将/data/data/se.warting.spotify/lib/libspotify.so复制到/data/data/se.warting.spotify/libspotify.so.12 然后将以下内容加载到库中:
System.load("/data/data/se.warting.spotify/libspotify.so.12");
之后,我可以正常加载jlibspotify:
System.loadLibrary("jlibspotify");
马蒂什的回答是正确的,它应该用Android的NDK构建系统构建。 当无法控制库时,有一个解决方法: 而不是使用System.loadLibrary JLibSpotify加载库; 我手动将/data/data/se.warting.spotify/lib/libspotify.so复制到/data/data/se.warting.spotify/libspotify.so.12 然后将以下内容加载到库中:
System.load("/data/data/se.warting.spotify/libspotify.so.12");
之后,我可以正常加载jlibspotify:
System.loadLibrary("jlibspotify");
我将在这里展示我的Java/JVM技能,并尝试在Android/Dalvik上应用它们 System.loadLibrary需要一个JNI库名称作为其参数。在本例中,libspotify不是而且从来都不是JNI库,但libjlibspotify似乎是。注意第一个调用如何在日志中抱怨缺少JNI_OnLoad函数。这通常是一个很好的提示。然而,只要可以找到任何共享库,System.loadLibrary都会接受它,这就是为什么在这种情况下调用不会失败的原因 JNI库的依赖库由平台内置的共享库加载机制自动加载。在这种情况下,libjlibspotify依赖于libspotify.so.12,因此如果加载程序的路径中有这样一个文件可用,那么无论何时加载libjlibspotify,系统都应该自动加载该文件 因此,在这种情况下,正确的Java代码应该是:
public class Session {
static {
System.loadLibrary("jlibspotify");
}
}
但是,如果在System.loadLibrary调用中未找到依赖库,则该调用将失败,并出现未满足的链接错误。请参阅有关缺少的依赖libspotify.so.12文件的日志
libspotify 12目前以libspotify.so.12.1.45的形式在存档中发布,其中一些符号链接libspotify.so和libspotify.so.12指向该文件。我不知道libjlibspotify是如何在这个场景中构建的,但是如果符号链接在Android设置中不相关,那么libjlibspotify应该构建为从存档中加载libspotify.so.12.1.45,无需重命名
我将在这里展示我的Java/JVM技能,并尝试在Android/Dalvik上应用它们 System.loadLibrary需要一个JNI库名称作为其参数。在本例中,libspotify不是而且从来都不是JNI库,但libjlibspotify似乎是。注意第一个调用如何在日志中抱怨缺少JNI_OnLoad函数。这通常是一个很好的提示。然而,只要可以找到任何共享库,System.loadLibrary都会接受它,这就是为什么在这种情况下调用不会失败的原因 JNI库的依赖库由平台内置的共享库加载机制自动加载。在这种情况下,libjlibspotify依赖于libspotify.so.12,因此如果加载程序的路径中有这样一个文件可用,那么无论何时加载libjlibspotify,系统都应该自动加载该文件 因此,在这种情况下,正确的Java代码应该是:
public class Session {
static {
System.loadLibrary("jlibspotify");
}
}
但是,如果在System.loadLibrary调用中未找到依赖库,则该调用将失败,并出现未满足的链接错误。请参阅有关缺少的依赖libspotify.so.12文件的日志
libspotify 12目前以libspotify.so.12.1.45的形式在存档中发布,其中一些符号链接libspotify.so和libspotify.so.12指向该文件。我不知道libjlibspotify是如何在这个场景中构建的,但是如果符号链接在Android设置中不相关,那么libjlibspotify应该构建为从存档中加载libspotify.so.12.1.45,无需重命名
能否检查libjlibspotify.so文件依赖于哪些共享库?您可以使用以下命令对objdump执行此操作:arm-linux-androideabi-objdump.exe-p libtest.so | grep NEEDEDI无法
t格式化输出,所以我编辑了我的问题,我想问题出在需要的库上,我该如何更改它?您的日志显示libspotify.so加载正常-看起来jlibspotify不正确地依赖于libspotify.so.12。您能检查libjlibspotify.so文件依赖于哪些共享库吗?您可以使用以下命令对objdump执行此操作:arm-linux-androideabi-objdump.exe-p libtest.so | grep NEEDEDI无法格式化输出,因此我编辑了我的问题,我想问题出在所需的库中,我如何更改它?您的日志显示libspotify.so加载正常-看起来jlibspotify不正确地依赖libspotify.so.12。当然会,但我不能这样做。我想这个问题是spotify造成的。当然会,但我做不到。我想这个问题是spotify造成的。事实并非如此。您可以使用System.loadLibrary加载任何共享库,以便以后可以在自己的过程中搜索符号。即使这些依赖库不包含任何JNI代码。即使对于JNI库,没有JNI_OnLoad也是完全有效的。jlibspotify是用Androids ndk build构建的。libspotify并非如此。事实并非如此。您可以使用System.loadLibrary加载任何共享库,以便以后可以在自己的过程中搜索符号。即使这些依赖库不包含任何JNI代码。即使对于JNI库,没有JNI_OnLoad也是完全有效的。jlibspotify是用Androids ndk build构建的。libspotify并非如此。