我使用这个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)
答案 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();
}