error: DIV usage mismatch between xx and output

使用NDK编译代码的时候,常常需要导入预编译库。然而使用预编译库的时候报错了。

因为库文件是android源码编译出来或者是其他NDK版本产生的,库版本存在了不兼容的情况。


这里明显看出DIV 函数不兼容。

/home/u/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error:

DIV usage mismatch between /home/u/jr/android/obj/local/armeabi/libspeexresampler.so and output

当然最简单的办法就是拿到源码放到同一个编译器下编译一次。



android源码在external/目录下提供了很多有用的库,能利用上当然是很好的。


所以为了让编译出来动态链接库或者是静态库 能在ndk环境下正常使用。

ndk编译通常是jni目录下进行的,所以简单的方法是将需要编译的库拷贝一份再执行一次ndk-build.

这里存在一个问题,将动态库改成静态库,会发现根本不编译了,这时候需要加一个文件,指定一下编译的目标

jni\ 目录下添加一个 Application.mk 文件,里面只写上如下一行代码:
APP_MODULES := lib库名

这样其他工程用用到这个库,只需要预编译即可。




这里用一个libspeexresampler.so 的例子,源码在external/speex/

cp speex/  -R jni/

ndk-build

然后吧生产的so拷贝到其他工程下,Android.mk加入
include $(CLEAR_VARS)
LOCAL_MODULE := libspeexresampler
LOCAL_SRC_FILES :=libspeexresampler.so
include $(PREBUILT_SHARED_LIBRARY)
然后再依赖的模块加入:

LOCAL_SHARED_LIBRARIES := libspeexresampler






你可能感兴趣的:(error: DIV usage mismatch between xx and output)