android - 为 Android 构建 bspatch

标签 android android-ndk

我需要从 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/

相关文章:

android - 无法在 Android 中注销 GCM

android - 在android应用程序中合并两个手势原始文件

Android NDK 找到动态链接 : unable to debug library

android-studio - Android Studio 13 无法触发原生代码中的断点

java - 当我尝试在 android studio 3 上构建 apk 时,它给了我错误

java - 是否可以在后台捕获麦克风?

android - fragment 的 onOptionsItemSelected 没有被调用

java - 解密的字符串具有有效和无效字符

android - 如何优化递归嵌入布局?

android - 单元测试 JNI 调用