2011-10-30 56 views
1

我用這個AES庫(C語言),
http://gladman.plushost.co.uk/oldsite/AES/aes-src-16-04-07.zip

我遵循這個頁面,並使用提到編譯 libaes的commds。一個
http://forums.devshed.com/c-programming-42/aes-encrypt-decrypt-in-c-687368.html
NDK建造「成員...歸檔是不是對象」

gcc -c -O2 -fomit-frame-pointer aescrypt.c aeskey.c aestab.c aes_modes.c 
ar rcs libaes.a *.o 

我可以編譯和使用 libaes.a沒有問題運行我的程序。

但是,如果使用NDK,建立編譯我的程序(實際上修改一點點),
我總是收到此錯誤信息,並無法編譯...

」 ...成員 aes_modes.o在歸檔中不是一個對象...「

該文件有什麼問題?
或者這個過程有什麼問題?

我Android.mk:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := libaes 
LOCAL_SRC_FILES := libaes.a 
include $(PREBUILT_STATIC_LIBRARY) 
include $(CLEAR_VARS) 
LOCAL_MODULE := hello-jni 
LOCAL_SRC_FILES := hello-jni.c 
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
LOCAL_C_INCLUDES :=\ 
    /android-ndk-r6b/platforms/android-8/arch-arm/usr/include\ 
    /android-ndk-r6b/samples/hello-jni/jni/libaes 
LOCAL_WHOLE_STATIC_LIBRARIES := libaes 
include $(BUILD_SHARED_LIBRARY) 


+0

我的電腦 「Windows 7中,64位」。這與我的問題有關嗎? – user538565

回答

1

我有,你有本地工具(86),並把它作爲預生成庫編譯AES的感覺。我已經試過這Android.mk和它的作品:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := aes 
LOCAL_SRC_FILES := aes/aescrypt.c aes/aeskey.c aes/aestab.c aes/aes_modes.c 

include $(BUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_C_INCLUDES  := jni/aes 
LOCAL_STATIC_LIBRARIES := aes 
LOCAL_MODULE   := hello-jni 
LOCAL_SRC_FILES   := hello-jni.c 

include $(BUILD_SHARED_LIBRARY) 

只需解壓aes-src-16-04-07.zipjni/aes。我認爲使用ndk構建系統會更好,因爲它可以設置所有必需的選項。

和Hello-jni.c(以防萬一):

#include <aes.h> 

void test() { 
    aes_init(); 
} 
+0

它的工作原理。謝謝。但仍然有問題。我用cygwin和PC上的加密文件編譯我的程序(Windows 7,64位)。然後我將加密的文件推送到SDcard上,在Android上解密它們。不幸的是,解密文件不可讀,與此線程相同的問題:http://stackoverflow.com/questions/7937715/android-aes-in-c爲什麼? – user538565

+0

uint_8t與PC和Android相同嗎? – user538565

+1

雖然第一個 - 也許它是[endianness](http://en.wikipedia.org/wiki/Endianness)問題?如果是這樣,請嘗試切換單詞中的字節。 – m039

相關問題