Kev*_*ker 11 c++ android android-ndk
我在Android NDK下构建项目时遇到问题.很可能是由于没有包含正确的共享/静态库.那些作为-lsomeLib我添加了,但是作为LOCAL_SHARED_LIBRARIES的那些没有被包括在内似乎......
我的Android.mk包含以下内容
LOCAL_SHARED_LIBRARIES + = libutils libmedia libz libbinder
这是完整的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)
Run Code Online (Sandbox Code Playgroud)
与这些库特别相关的许多错误之一(即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':
Run Code Online (Sandbox Code Playgroud)
在我看来,你不应该-lmedia在你的LOCAL_LDLIBS论点中包含等等.
如果查看,$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.
如果您的库只是常规的c/c ++库,那么#include您应该使用它们LOCAL_C_INCLUDES.
另请注意,来自$NDK/docs/ANDROID-MK.html:
- 构建系统为您处理许多细节.例如,您不需要列出Android.mk中生成的文件之间的头文件或显式依赖项.NDK构建系统将自动为您计算这些.
为了在我的本机代码中使用其他库,我只是简单地#include指定在哪里找到标题.这是我的LOCAL_C_INCLUDES:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/shared/Core/inc \
$(LOCAL_PATH)/shared/Model/inc \
$(LOCAL_PATH)/shared/boost/include
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.