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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值