ndk-build“存档中的成员...不是对象”

时间:2011-10-30 08:52:51

标签: android aes android-ndk

我使用这个AES库(用C语言编写),
http://gladman.plushost.co.uk/oldsite/AES/aes-src-16-04-07.zip

我按照这个页面使用提到的提交来编译 libaes.a
http://forums.devshed.com/c-programming-42/aes-encrypt-decrypt-in-c-687368.html

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

我可以使用 libaes.a 编译并运行我的程序而没有问题
但是如果使用 ndk-build 来编译我的程序(确实修改了一点),
我总是收到此错误消息并且无法编译...

存档中的

“... member 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)


1 个答案:

答案 0 :(得分:1)

我感觉你使用本机工具(x86)编译了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.zip解压缩到jni/aes即可。我认为使用ndk构建系统会更好,因为它可以设置所有必要的选项。

和hello-jni.c(以防万一):

#include <aes.h>

void test() {
    aes_init();
}