在进行TensorFlow模型的安卓移植时,碰到了这个问题
这里面x86, armeabi-v7abi等都指的是CPU的架构类型。而查看自己的CPU架构类型可以通过命令行查找。
问题起因:GitHub上下载了一个源码,导入Androidstudio的时候报出这个错误。
我的电脑是x86类型的,而在他源码中并没有对这个类型进行支持。
解决步骤:
1、在build.gradle的defaultConfig里面加上自己的类型,如图红框中所示,是我后来加上去的。你缺少了什么就加上相应的。
2、在libs目录下面也要对应的添加目录x86,并将armeabi-v7a中的文件全部复制过来,如图所示,红框的目录原本是没有的,这里新建的。
我这里x86里面装的是从包含so文件的armeabi-v7a文件夹复制过来的。
这个问题前阵子困扰了好久,参考网上的博客里面都只有上面的第一步,这样我会出现INSTALL_FAILED_NO_MATCHING_ABIS问题,然后就慢慢走远了…
今天继续拿来解决这个问题,按上面的步骤就成功解决了。
第二天更新
上面这么做以后编译已经没有问题,但是在加载库文件的时候出现报错。
报错发生在下面的代码位置:
控制台报错:java.lang.UnsatisfiedLinkError: dlopen failed:…/lib/x86/libtensorflow_inference.so" has unexpected e_machine: 40 (EM_ARM)
这个意思是**.so文件的指令集和运行程序的指令集不匹配。**我这里需要的是x86的.so
文件,但是由于我是从armeabi-v7a里面复制出来的,因此这里实际上是arm类型的文件。
所以解决办法应该是要找到正确CPU架构类型的.so文件,或者在自己机器上bazel编译对应的文件。
如果实在不想解决这个问题,编译通过后,在手机上安装是能够成功运行不会闪退的。
来源:CSDN
作者:零分分分分
链接:https://blog.csdn.net/qq_33399567/article/details/100122485