2

私はAndroidアプリにlibspotifyを使用しようとしていますが、cラッパーの構築に問題があります。私はlibspotifyにそのバージョンが何であるかを尋ねるだけの非常に小さなラッパーを作成しました。

私のフォルダ構造は次のようになります。

jni
 |-libs
 |  |-Android.mk
 |  |-libspotify.so    (symlink)
 |  |-libspotify.so.12 (symlink)
 |  |-libspotify.so.12.1.51
 |
 |-include
 |  |-libspotify
 |     |-api.h
 |
 |-Android.mk
 |-spotifywrap.c

/jni/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES := libspotify
LOCAL_MODULE := spotifywrap
LOCAL_SRC_FILES := spotifywrap.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)

/jni/spotifywrap.c

include <jni.h>
include <libspotify/api.h>

jstring Java_com_example_ndktest_MainActivity_getBuild(JNIEnv * env, jobject this)
{
    jstring result = (*env)->NewStringUTF( env, sp_build_id() );
    return result;
}

/jni/libs/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libspotify
LOCAL_SRC_FILES := libspotify.so
include $(PREBUILT_SHARED_LIBRARY)

ndk-buildを実行すると、次のようになります。

spotifywrap.c:6: undefined reference to `sp_build_id'

sp_build_idは、api.hのインターフェースの一部です。

私が間違っていることについて何か考えはありますか?

4

1 に答える 1

1

jniサブディレクトリ内のディレクトリ構造が問題の原因であると感じています。Android.mkビルドファイルを編集して、これを追加してみてください。

LOCAL_CPPFLAGS = -std=c++0x -D__STDC_INT64__
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

また、リンクを成功させるlibspotify.soには、最上位のディレクトリにコピーする必要があると思います。libs/armeabi

于 2012-11-07T12:59:24.690 に答える