在Android上加载libpthread.so时出错

时间:2014-09-26 07:15:45

标签: android linux android-ndk pthreads spotify

我正在使用android-NDK-r10编译包含libspotify功能的C ++代码。

在我的应用中,我在onCreate()类的方法中包含两个库,扩展Service,如下所示:

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

在我的C ++代码中(编译为“libspotifywrapper.so”),像往常一样包含libpthread:

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

使用ndk-build进行编译,我没有收到任何错误。

当我启动我的Android应用程序时,dalvik崩溃并显示以下消息:

  

09-26 08:18:18.941:E / dalvikvm(11820):dlopen(“/ data / 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中,不是吗?

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

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

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

2 个答案:

答案 0 :(得分:1)

Android上没有libpthread.so,所有pthread功能都由C库直接实现。

您的libspotify.so未使用与Android兼容的工具链进行编译,您将无法在Android上加载/使用它。询问向谁提供与Android兼容的版本,即使用NDK工具链构建的版本。

答案 1 :(得分:0)

您可能已经意识到这一点,但Spotify已经发布了Android SDK(目前处于测试阶段)。

您可以在此处找到有关它的更多信息: https://developer.spotify.com/news-stories/2014/06/25/announcing-new-spotify-android-sdk-beta/