gpt4 book ai didi

Android NDK 构建 - 包括 LOCAL_SHARED_LIBRARIES?

转载 作者:可可西里 更新时间:2023-11-01 15:22:36 32 4
gpt4 key购买 nike

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

我的 Android.mk 包含以下内容

LOCAL_SHARED_LIBRARIES += libutils libmedia libz libbinder

  1. ndk-build 实际上在哪里寻找这些库?
  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':

最佳答案

在我看来你不应该包括 -lmedia等在你的LOCAL_LDLIBS参数。

1。 ndk-build 实际上在哪里寻找这些库?

如果您查看 $NDK/docs/STABLE-APIS.html您会看到可以通过这种方式包含一组指定的库。注意:


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

虽然我只查找 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.

为了在我的 native 代码中使用其他库,我简单地 #include它然后指定在哪里可以找到标题。这是我的 LOCAL_C_INCLUDES :

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

希望对您有所帮助。

关于Android NDK 构建 - 包括 LOCAL_SHARED_LIBRARIES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987767/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com