我需要从 bsdiff-4.3 构建 bspatch.c 以在运行 KitKat 的安卓平板电脑上工作,但我不断收到以下错误。
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++ 的经验,因此非常感谢任何帮助。
最佳答案
我为遇到类似问题的任何人找到了解决方法。 我将我的 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
关于android - 为 Android 构建 bspatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300809/