Вопрос по android, android-ndk, c++ – Сборка Android NDK - Включить LOCAL_SHARED_LIBRARIES?

10

У меня проблемы с созданием проекта под Android NDK. Скорее всего, это связано с отсутствием соответствующих общих / статических библиотек. Те, что -lsomeLib я добавил, но те, что LOCAL_SHARED_LIBRARIES не включены, кажется ...

Мой Android.mk содержит следующее

LOCAL_SHARED_LIBRARIES + = libutils libmedia libz libbinder

Where does ndk-build actually look for these libraries? If I don't include the -lutils -lmedia -lz -lbinder, I am not able to even get to the linker error. I have a feeling including just -LsomeDir and -lsomeLib is not the correct way to add them.

Вот полный Android.mk.

LOCAL_PATH := /Users/kevin/Desktop/player2/videoplayer/videoplayer/jni
LIBPLAYER_PATH := $(LOCAL_PATH)/../../LibPlayer

include $(CLEAR_VARS)

$(warning Android make file: $(LOCAL_PATH)/Android.mk)
$(warning Android sysroot: $(SYSROOT))
$(warning Additional LD_LIBS: $(LOCAL_PATH)/lib)

ifeq ($(BUILD_ID),MID)
        LOCAL_CFLAGS += -DENABLE_FREE_SCALE
endif

LOCAL_MODULE    := libamplayerjni
LOCAL_SRC_FILES := com_farcore_playerservice_AmPlayer.c sys_conf.c
LOCAL_ARM_MODE := arm
LOCAL_C_INCLUDES := $(LIBPLAYER_PATH)/amplayer/player/include \
    $(LIBPLAYER_PATH)/amplayer/control/include \
    $(LIBPLAYER_PATH)/amcodec/include \
    $(LIBPLAYER_PATH)/amffmpeg \
    $(JNI_H_INCLUDE) \
    /Android/ndk/build/tools/android-9-toolchain/sysroot/usr/include \
    /Android/ndk/build/platforms/android-9/arch-arm/usr/include \
    /Android/source_2.3/system/core/include \
    /Android/source_2.3/frameworks/base/include

LOCAL_LDLIBS := -L/Users/kevin/Desktop/player2/videoplayer/videoplayer/jni/lib -L$(SYSROOT)/usr/lib -llog -lz -lm -ldl **-lmedia -lstagefright -lutils -lbinder -lgcc -landroid -lc -lstdc++ -lthread_db**

**LOCAL_STATIC_LIBRARIES := libamplayer libamcodec libavformat libavcodec libavutil libamadec**
LOCAL_SHARED_LIBRARIES += libutils libmedia libz libbinder 

LOCAL_PRELINK_MODULE := false

include $(BUILD_SHARED_LIBRARY)

Одна из многих ошибок, связанных конкретно с этими библиотеками (например, libmedia.so).

/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_uninit':
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:220: undefined reference to `android::AudioTrack::stop()'
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:228: undefined reference to `android::AudioTrack::~AudioTrack()'
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock':

Ваш Ответ

1   ответ
7

-lmedia и т. д. в вашемLOCAL_LDLIBS аргументы.

1. Where does ndk-build actually look for these libraries?

Если вы посмотрите в$NDK/docs/STABLE-APIS.html вы увидите, что существует определенный набор библиотек, которые вы можете включить таким образом. Замечания:

The headers corresponding to a given API level are now located under $NDK/platforms/android-<level>/arch-arm/usr/include

Посмотрев сам, ни одна из указанных вами библиотек там не существует, хотя я искал только API-14.

2. If I don't include the -lutils -lmedia -lz -lbinder, I am not able to even get to the linker error. I have a feeling including just -LsomeDir and -lsomeLib is not the correct way to add them.

Если ваши библиотеки просто обычные библиотеки c / c ++, то вы бы#include вы должны использоватьLOCAL_C_INCLUDES вместо.

Также обратите внимание, от$NDK/docs/ANDROID-MK.html:

The build system handles many details for you. For example, you don't need to list header files or explicit dependencies between generated files in your Android.mk. The NDK build system will compute these automatically for you.

Для того, чтобы использовать другие библиотеки в моем родном коде, я просто#include затем укажите, где найти заголовки. Вот мойLOCAL_C_INCLUDES:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/shared/Core/inc \
                    $(LOCAL_PATH)/shared/Model/inc  \
                    $(LOCAL_PATH)/shared/boost/include

Надеюсь, это поможет.

Похожие вопросы