ndk-build "член ... в архиве не объект" - PullRequest
1 голос
/ 30 октября 2011

Я использую эту библиотеку 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 Ответ

1 голос
/ 30 октября 2011

У меня такое чувство, что вы скомпилировали aes с помощью собственных инструментов (x86) и использовали его в качестве библиотеки предварительной сборки.Я пробовал это 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();
}
...