问题
在x86虚拟机里编译perfetto的时候遇到执行protoc报非法指令,但是在host上编译的时候并没有这样的问题
原因
虽然虚拟机和宿主机都是同一个指令集架构,但是CPU在一些特殊指令上的支持还是有区别的,如果Host可以,但是虚拟机上不行,可能就是虚拟机CPU不支持某些特性,导致当执行到这些指令时无法识别,所以报非法指令的错误。
-
下面是Host的CPU支持的特性
-
下面是虚拟机的CPU特性
解决
修改虚拟机的启动参数,将CPU支持的特性跟host保持一致,加入--cpu host
即可。
再次启动后,编译就顺利完成了,可以看到此时虚拟机CPU的特性跟Host就差不多了: