2012-09-12 4 views
7

all: Robię aplikację na Androida, która może się pochwalić czytnikiem kart inteligentnych ccid z telefonu komórkowego z Androidem, Wybrałem w ten sposób: "pcsc-lite-1.8.5 + ccid-1.4.7 + libusb-1.0. 3 ", które działają w Ubuntu (Linux na PC) bardzo dobrze. następnie próbowałem przenieść je na Androida, jest wiele problemów podczas kompilacji. większość tych problemów jest to, że Bionic biblioteki Androida brakuje niektórych nagłówków i funkcje, takie jak:sys/fcntl.h: nie ma takiego pliku, podczas gdy cross kompilowanie pcsclite dla Androida?

  1. sys/fcntl.h, mqueue.h: Nie ma takiego pliku;

  2. pthread_cancel: undefined reference;

i teraz, gdy jestem cross-kompilacji pcsclite budowania wykonywalny "pcscd", mam ten błąd:

sd-daemon.c:35:23: fatal error:sys/fcntl.h:No such file or directory

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) 

Odpowiedz

8

Wiele nagłówków Androida nie znajduje się w standardowej lokalizacji. Możesz użyć poniższego polecenia, aby wyszukać NDK dla lokalizacji brakujących plików find . -name fcntl.h. Wygląda na to, że include <sys/fcntl.h> należy zmienić na include <fcntl.h>.

Biblioteka pthread z Androidem nie zawiera pthread_cancel, patrz "docs/OVERVIEW.html". Nie powinno być trudne zastąpienie pthread_cancel.

Nie jestem pewien, co zrobić z mqueue.

Powiązane problemy