项目中使用了seetaface6来做人脸识别,程序在虚拟机和服务器中都可以跑起来,所以当时就认为没什么问题了。谁知道移植到网关中运行后,直接崩溃,非法指令集。

 

两者的差别是什么呢?

服务器和网关都是基于X86架构的,虚拟机和服务器都是64位的机器,而网关是32位的机器,难道需要编译成32位的程序?

为了验证这个想法,重新编译所有的seetaface的库,尤其是那个tennis,让人蛋疼,一搞就是5个小时。还有那个opencv,也让人蛋疼。

最后编译出来了,结局让人心碎,还是非法指令集。

这也不行啊,怎么办呢?明显是seeta库的原因了,因为即使我的代码中,只print hello world,也会报非法指令集这个故障。只能再看seetaface的帮助文档了。这次仔细看了,关于指令集的描述如下:

 因为网关的cpu是pentium的,而默认编译出来的库,都是调用tennis这个库,那是不是需要链接的时候,将默认链接tennis改为链接tennis_pentium?

再次重新编译seetaface几个主要的库,不需要编译tennis的话,速度还是很快的。再次重新链接,错误不一样了,这次报错如下:

 再次看指令集相关部分的描述,

 然后看了一下网关CPU的指令集,只有SSE,与打印信息一样。

........................................

更新一下,昨天将赛扬的cpu换成了i3的,再次跑了一下程序,也不报非法指令了,而且速度挠挠的

点击阅读全文
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐