sys/fcntl.h:交叉编译pcsclite for Android时没有这样的文件?

bob*_*bob 7 android android-ndk

所有:我正在制作一个Android应用程序,可以与Android手机的ccid智能卡读卡器进行通信,我选择了这种方式:"pcsc-lite-1.8.5 + ccid-1.4.7 + libusb-1.0.3"运行在Ubuntu(Linux上的OS OS)非常好.然后我试图将它们移植到android,交叉编译时有很多问题.大多数这些问题是Android的仿生库缺少一些标题和功能,如:

  1. sys/fcntl.h,mqueue.h:没有这样的文件;

  2. pthread_cancel:未定义的引用;

现在,虽然我正在交叉编译pcsclite以构建可执行文件"pcscd",但是我收到了这个错误:

sd-daemon.c:35:23:致命错误:sys/fcntl.h:没有这样的文件或目录

Android.mk:

#===================================================
# ******  pcscd ******  
#===================================================

include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE:=false
LOCAL_SRC_FILES:=atrhandler.c \
     debuglog.c \
     dyn_hpux.c \
     dyn_macosx.c \
     dyn_unix.c \
     eventhandler.c \
     hotplug_generic.c \
     ifdwrapper.c \
     pcscdaemon.c \
     powermgt_generic.c \
     prothandler.c \
     readerfactory.c \
     simclist.c \
     strlcat.c \
     sys_unix.c \
     tokenparser.c \
     hotplug_libudev.c \
     hotplug_libusb.c \
     hotplug_linux.c \
     hotplug_macosx.c \
     utils.c \
     winscard.c \
     winscard_msg.c \
     winscard_msg_srv.c \
     winscard_svc.c \
     sd-daemon.c
LOCAL_CFLAGS+= -DHAVE_LIBUSB
LOCAL_C_INCLUDES+=$(LOCAL_PATH)/ $(LOCAL_PATH)/src/ $(HOME)/android-ndk-r8b/samples/includes-libusb1.0.3/ $(LOCAL_PATH)/PCSC/ 
LOCAL_LDFLAGS:=-shared
LOCAL_MODULE:=pcscd
LOCAL_LDLIBS:=-llog $(HOME)/android-ndk-r8b/samples/libs-libusb1.0.3/libusb-1.0.so
include $(BUILD_EXECUTABLE)
Run Code Online (Sandbox Code Playgroud)

Fro*_*zie 8

许多Android标头都不在标准位置.您可以使用以下命令在NDK中搜索丢失文件的位置find . -name fcntl.h.它似乎include <sys/fcntl.h>需要改为include <fcntl.h>.

Android pthread库不包含pthread_cancel参见'docs/OVERVIEW.html'.更换应该不难pthread_cancel.

我不知道该怎么办mqueue.