Android NDK建筑 – 包括LOCAL_SHARED_LIBRARIES?

我在 Android NDK下构建项目时遇到问题.很可能是由于没有包括正确的共享/静态库.我添加的是-lsomeLib,但是没有包含LOCAL_SHARED_LIBRARIES的那些似乎…

我的Android.mk包含以下内容

LOCAL_SHARED_LIBRARIES = libutils libmedia libz libbinder

> ndk-build在哪里实际寻找这些图书馆?
>如果我不包括-lutils -lmedia -lz -lbinder,我甚至无法连接到链接器错误.我有一种感觉,包括只有-LsomeDir和-lsomeLib不是正确的方法来添加它们.

这是完整的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':

解决方法

它看起来像我不应该在你的LOCAL_LDLIBS参数中包含-lmedia等.

ndk-build在哪里实际寻找这些图书馆?

如果您查看$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.如果我不包括-lutils -lmedia -lz -lbinder,包括只有-LsomeDir和-lsomeLib不是正确的方法来添加它们.

如果您的库只是常规的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

我希望这有帮助.

相关文章

ADB Remote ATV Android TV 的遥控器,基于 ADB Shell 命令 ...
使用Flutter自带的SearchDelegate组件实现搜索界面,通过魔改...
上篇文章讲解了怎么使用Kotlin的协程配合Retrofit发起网络请...
安卓开发——WebView+Recyclerview文章详情页,解决高度...
Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...