Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Android Ndk中构建本地共享库_Android_Android Ndk_Android Make - Fatal编程技术网

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

无法在Android Ndk中构建本地共享库,android,android-ndk,android-make,Android,Android Ndk,Android Make,我想建立库。所以对于版本4.0.3,我无法这样做。 我觉得这些问题是因为我的.mk文件不是 与图书馆链接 Android.mk文件 Binder.cpp \ BpBinder.cpp \ CursorWindow.cpp \ IInterface.cpp \ IMemory.cpp \ IPCThreadState.cpp \ IPermissionController.cpp \ IServiceManager.cpp \ MemoryDealer.cpp \ MemoryBase.cpp \

我想建立库。所以对于版本4.0.3,我无法这样做。 我觉得这些问题是因为我的.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.cpp

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
 LOCAL_LDLIBS += -lpthread
LOCAL_MODULE := libbinder1
LOCAL_SHARED_LIBRARIES := liblog libcutils libutils
LOCAL_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)
此文件为我构建静态文件,即一个文件,但在构建共享库时显示以下错误

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

[armeabi]Compile++thumb:binder1Android NDK支持
pthread
s,但不像Linux工具链中那样提供libpthread。如果使用,您的第一条错误消息将消失

LOCAL_CFLAGS += -DHAVE_PTHREADS
并且不添加
LOCAL\u LDLIBS+=-lpthread

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

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

无论如何,将系统库称为
LOCAL\u SHARED\u库
不适用于
ndk build
。而不是
LOCAL\u SHARED\u库:=liblog libcutils libutils

LOCAL_LDLIBS += -llog -lcutils -lutils

您是在系统树中构建这个项目,还是使用
ndk build
?ndk build…我不知道什么是系统树!我是新来的这个图书馆该做什么?你是从哪里获得代码库的?我从code.google.com为Android下载了zip。你似乎在暗示海报试图使用未导出到NDK的平台/AOSP内部功能。然而,您所说的方式并不十分准确,似乎混淆了导出与权限的问题,例如,如果您检查第三方应用程序的流程,您会发现libbinder.so是一个依赖项(一个已经由zygote加载的依赖项),它实际上并不“需要具有提升权限的系统应用程序”虽然它不是为了让第三方代码直接与之交互,而且很难使用。@ChrisStratton感谢您的澄清。我确认
libbinder.so可以在用户进程中加载
LOCAL_LDLIBS += -llog -lcutils -lutils