android.mk 包含boost,Android NDK建筑 – 包括LOCAL_SHARED_LIBRARIES?

在Android NDK环境下构建项目时遇到了链接错误,问题可能源于未正确包含共享/静态库。尽管指定了-lsomeLib,但缺少LOCAL_SHARED_LIBRARIES中的库,如libutils、libmedia等。Android.mk文件包含了多个库的引用,但在链接阶段仍然出现未定义的引用错误,例如针对libmedia.so的引用。这表明链接器无法找到必要的库文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在

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':

这些都是 Android NDK 内部的 `Android.mk` 文件。其中,`./android-ndk-r25c/sources/android/native_app_glue/Android.mk` 是用于编译 Native Activity 示例应用程序的 `Android.mk` 文件;`./android-ndk-r25c/sources/android/support/Android.mk` 是包含一些 Android 支持库的 `Android.mk` 文件;`./android-ndk-r25c/sources/android/ndk_helper/Android.mk` 是包含一些辅助函数和类的 `Android.mk` 文件;`./android-ndk-r25c/sources/android/cpufeatures/Android.mk` 是用于编译 `cpufeatures` 库的 `Android.mk` 文件,该库提供了一些 CPU 相关的信息和功能;`./android-ndk-r25c/sources/cxx-stl/llvm-libc++abi/Android.mk` 和 `./android-ndk-r25c/sources/cxx-stl/llvm-libc++/Android.mk` 是用于编译 C++ STL 库的 `Android.mk` 文件,分别对应 libc++abi 和 libc++ 两个 STL 库;`./android-ndk-r25c/sources/third_party/googletest/Android.mk` 是用于编译 Google Test 测试框架的 `Android.mk` 文件;`./android-ndk-r25c/sources/third_party/shaderc/Android.mk` 是用于编译 Shaderc 编译器的 `Android.mk` 文件,该编译器可以将 GLSL 代码编译成 SPIR-V 代码;`./android-ndk-r25c/sources/third_party/shaderc/libshaderc/Android.mk` 是用于编译 Shaderc 库的 `Android.mk` 文件;`./android-ndk-r25c/sources/third_party/shaderc/libshaderc_util/Android.mk` 是用于编译 Shaderc Util 库的 `Android.mk` 文件,该库提供了一些辅助函数和类;`./android-ndk-r25c/sources/third_party/shaderc/third_party/Android.mk` 是用于编译 Shaderc 编译器依赖的第三方库的 `Android.mk` 文件,包括 glslang 和 spirv-tools 两个库;`./android-ndk-r25c/sources/third_party/shaderc/third_party/glslang/Android.mk` 是用于编译 glslang 库的 `Android.mk` 文件;`./android-ndk-r25c/sources/third_party/shaderc/third_party/spirv-tools/Android.mk` 是用于编译 spirv-tools 库的 `Android.mk` 文件;`./android-ndk-r25c/sources/third_party/vulkan/src/build-android/jni/Android.mk` 是用于编译 Vulkan 库的 `Android.mk` 文件。 如果您要在 Android NDK 中编写自己的 `Android.mk` 文件,可以参考这些示例文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值