Android NDK构build – 包含LOCAL_SHARED_LIBRARIES?

我在使用Android NDK构build项目时遇到问题。 很可能是由于没有包含正确的共享/静态库。 作为-lsomeLib我补充说,但LOCAL_SHARED_LIBRARIES那些没有被包括在内似乎…

我的Android.mk包含以下内容

LOCAL_SHARED_LIBRARIES + = libutils libmedia libz libbinder

  1. ndk-build在哪里find这些库?
  2. 如果我不包含-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': 

Solutions Collecting From Web of "Android NDK构build – 包含LOCAL_SHARED_LIBRARIES?"

它看起来像你不应该在你的LOCAL_LDLIBS参数中包括-lmedia等。

1. 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 ++库,你应该使用LOCAL_C_INCLUDES

另请注意,从$NDK/docs/ANDROID-MK.html

  • 构build系统为您处理许多细节。 例如,您不需要在Android.mk中列出生成的文件之间的头文件或显式的依赖关系。 NDK构build系统将自动为您计算这些。

为了在我的本地代码中使用其他库,我只是#include它,然后指定在哪里可以find标题。 这是我的LOCAL_C_INCLUDES

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

我希望这有帮助。