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

时间:2012-09-12 08:46:21

标签: android android-ndk

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

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

  2. pthread_cancel:未定义的引用;

  3. 现在,虽然我正在交叉编译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)
    

1 个答案:

答案 0 :(得分:8)

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

Android pthread库不包含pthread_cancel,请参阅&doces / OVERVIEW.html&#39;。替换pthread_cancel应该不难。

我不确定如何处理mqueue