2014-09-26 567 views
0

我正在使用android-NDK-r10来编译我的C++代码,它包装了libspotify的函数。在Android上加载libpthread.so时出错

以我的应用程序,我包括在延伸Service这样一类的onCreate()方法两个库:

System.loadLibrary("spotify"); 
System.loadLibrary("spotifywrapper"); 

以我C++代码(编译为 “libspotifywrapper.so”),I包括的libpthread照例:

#include <stdlib.h> 
#include <pthread.h> 
#include <string> 
#include <api.h> 

用ndk-build编译工程,我没有收到任何错误。

当我开始我的Android应用,达尔维克崩溃,并显示以下消息:

8月9日至26日:18:18.941:E/dalvikvm(11820):的dlopen(“/数据/ APP-LIB/com.example.myApp-1/libspotify.so“)失败:dlopen失败:无法加载”libspotify.so“所需的库”libpthread.so.0“;造成库“libpthread.so.0”找不到

我复制this版本的libpthread到libs/armeabi/,它重命名为libpthread.so,并且包括像上述两个库。当我运行该应用程序时,它会产生一个错误,找不到libc.so.6
Afaik,libc不包含在Android中,不是吗?

问谷歌,我读到libpthread包含在libc中,但由于Android使用Bionic,我不知道它是否包含libpthread。

实际的问题是:如何摆脱这个错误,找不到libpthread?
我认为这不是那么困难,而编译工作正常,它不可能是我的代码中的错误。我的Android设备(4.4.4和4.4.2)是否是原因?

我希望你能帮助我,
卢卡斯

回答

1

有Android上没有libpthread.so,所有的并行线程功能直接由C库实现的。

您的libspotify.so没有与Android兼容的工具链编译,您将无法在Android上加载/使用它。询问谁提供给你一个Android兼容版本,也就是使用NDK工具链构建的版本。

+0

我用Android的手臂正式libspotify版本,它应该工作。我也尝试过armv7发行版,但这不起作用。 – 2014-09-30 09:00:14

+1

它取决于libpthread.so.0,它不是Android上存在的库,它当然不是官方的Android手臂二进制文件。这可能是嵌入式Linux/arm系统的一种。再次请与您的供应商联系。 – Digit 2014-09-30 14:05:11