无法在Android Ndk中构建本地共享库

无法在Android Ndk中构建本地共享库,第1张

概述我想为版本4.0.3构建库.so,但我无法这样做.我的感觉是这些问题是由于我的.mk文件不是与库链接.Android.mk文件Binder.cpp\BpBinder.cpp\CursorWindow.cpp\IInterface.cpp\IMemory.cpp\IPCThreadState.cpp\IPermissionController.cpp\IServiceManager.cpp\Memor

我想为版本4.0.3构建库.so,但我无法这样做.
我的感觉是这些问题是由于我的.mk文件不是
与库链接.

Android.mk文件

Binder.cpp \BpBinder.cpp \CursorWindow.cpp \IInterface.cpp \IMemory.cpp \IPCThreadState.cpp \IPermissionController.cpp \IServiceManager.cpp \MemoryDealer.cpp \MemoryBase.cpp \MemoryHeapBase.cpp \MemoryHeapPmem.cpp \Parcel.cpp \PermissionCache.cpp \Processstate.cpp \Static.cppLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS) LOCAL_LDliBS += -lpthreadLOCAL_MODulE := libbinder1LOCAL_SHARED_liBRARIES := liblog libcutils libutilsLOCAL_SRC_fileS := $(sources)include $(BUILD_SHARED_liBRARY)#include $(CLEAR_VARS)#LOCAL_CFLAGS += -DHAVE_PTHREADS #LOCAL_LDliBS += -lpthread#LOCAL_MODulE := libbinder#LOCAL_SRC_fileS := $(sources)#include $(BUILD_STATIC_liBRARY)

此文件为我构建了静态文件,即.a文件,但在构建共享库时显示以下错误.

[armeabi] Compile++ thumb: binder1 <= IPCThreadState.cppjni/IPCThreadState.cpp:292:8: error: 'pthread_mutex_t' does not name a typejni/IPCThreadState.cpp:294:8: error: 'pthread_key_t' does not name a typejni/IPCThreadState.cpp: In static member function 'static androID::IPCThreadState*        androID::IPCThreadState::self()':

我使用修复了上述错误
        LOCAL_CFLAGS = -DHAVE_PTHREADS

但是现在,在生成库时,我收到了大量错误.

   D:/androID-ndk-r9c-windows-x86/androID-ndk-r9c/toolchains/arm-linux-androIDeabi-     4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androIDeabi/4.6/../../../../arm-linux-   androIDeabi/bin/ld.exe: error: cannot find -lpthreadD:/androID-ndk-r9c-windows-x86/androID-ndk-r9c/toolchains/arm-linux-androIDeabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androIDeabi/4.6/../../../../arm-linux-androIDeabi/bin/ld.exe: ./obj/local/armeabI/ObJs/binder1/Binder.o: in function androID::Vector<androID::String16>::do_copy(voID*, voID const*, unsigned int) const:jni/utils/TypeHelpers.h:142: error: undefined reference to 'androID::String16::String16(androID::String16 const&)'

任何帮助将不胜感激.

解决方法:

AndroID NDK支持pthreads,但不像linux工具链中一样提供libpthread.您的第一个错误消息将消失,如果您使用

LOCAL_CFLAGS += -DHAVE_PTHREADS

而不添加LOCAL_LDliBS = -lpthread

关于对do_copy()的未定义引用,它来自系统库libutils.so.使用未随NDK正式发布的库是不安全的(请参见here),因此最好重写这段代码.

可能是您从google source或其分支之一收到了AndroID.mk文件.我怀疑生成的库是否可用,因为原始的libbinder.so要求在启动应用程序时加载具有提升权限的系统应用程序.

无论如何,将系统库称为LOCAL_SHARED_liBRARIES不适用于ndk-build.代替LOCAL_SHARED_liBRARIES:= liblog libcutils libutils您应该编写

LOCAL_LDliBS += -llog -lcutils -lutils
总结

以上是内存溢出为你收集整理的无法在Android Ndk中构建本地共享库全部内容,希望文章能够帮你解决无法在Android Ndk中构建本地共享库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1095796.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存