为android构建bspatch

时间:2014-12-04 17:58:52

标签: android android-ndk

我需要从bsdiff-4.3构建bspatch.c以在运行KitKat的Android平板电脑上运行,但我一直遇到以下错误。

puter@radio:~/newWorkspace/AndroidCode$ $NDK_ROOT/ndk-build
[armeabi] Compile thumb  : bspatch <= bspatch.c
[armeabi] Executable     : bspatch
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:119: error: undefined reference to 'BZ2_bzReadOpen'
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:126: error: undefined reference to 'BZ2_bzReadOpen'
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:133: error: undefined reference to 'BZ2_bzReadOpen'
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:148: error: undefined reference to 'BZ2_bzRead'
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:165: error: undefined reference to 'BZ2_bzRead'
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:184: error: undefined reference to 'BZ2_bzRead'
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:195: error: undefined reference to 'BZ2_bzReadClose'
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:196: error: undefined reference to 'BZ2_bzReadClose'
/home/puter/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/bspatch/bspatch.o: in function main:jni/bspatch.c:197: error: undefined reference to 'BZ2_bzReadClose'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/bspatch] Error 1

这是我的Android.mk文件。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := bspatch.c
LOCAL_MODULE := bspatch
LOCAL_C_INCLUDES += /home/puter/android-ndk-r10c/sources/third_party/bzip2
LOCAL_STATIC_LIBRARIES := libbz2
include $(BUILD_EXECUTABLE)

此错误记录在许多地方,例如: https://bugs.launchpad.net/ubuntu/+source/bsdiff/+bug/726338,但我仍然不知道如何修复它。我是初级Java开发人员,但没有C或C ++经验,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我为任何有类似问题的人找到了解决方法。 我将Android.mk改为

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := bspatch.c bzlib.c crctable.c randtable.c decompress.c huffman.c
LOCAL_MODULE := bspatch
LOCAL_C_INCLUDES := /home/puter/android-ndk-r10c/sources/third_party/bzip2/
include $(BUILD_EXECUTABLE)

并使用导致未定义错误的方法将源文件复制到项目的jni文件夹中。

之后它构建良好

puter@radio:~/newWorkspace/AndroidCode$ /home/puter/android-ndk-r10c/ndk-build
[armeabi] Compile thumb  : bspatch <= bspatch.c
[armeabi] Compile thumb  : bspatch <= bzlib.c
[armeabi] Compile thumb  : bspatch <= crctable.c
[armeabi] Compile thumb  : bspatch <= randtable.c
[armeabi] Compile thumb  : bspatch <= decompress.c
[armeabi] Compile thumb  : bspatch <= huffman.c
[armeabi] Executable     : bspatch
[armeabi] Install        : bspatch => libs/armeabi/bspatch
相关问题