在虛擬機(jī)里執(zhí)行protoc報(bào)非法指令( Illegal instruction)
問(wèn)題
在x86虛擬機(jī)里編譯perfetto的時(shí)候遇到執(zhí)行protoc報(bào)非法指令,但是在host上編譯的時(shí)候并沒(méi)有這樣的問(wèn)題
原因
雖然虛擬機(jī)和宿主機(jī)都是同一個(gè)指令集架構(gòu),但是CPU在一些特殊指令上的支持還是有區(qū)別的,如果Host可以,但是虛擬機(jī)上不行,可能就是虛擬機(jī)CPU不支持某些特性,導(dǎo)致當(dāng)執(zhí)行到這些指令時(shí)無(wú)法識(shí)別,所以報(bào)非法指令的錯(cuò)誤。
-
下面是Host的CPU支持的特性

-
下面是虛擬機(jī)的CPU特性,明顯要比宿主機(jī)少很多

解決
修改虛擬機(jī)的啟動(dòng)參數(shù),將CPU支持的特性跟host保持一致,加入--cpu host即可。
再次啟動(dòng)后,編譯就順利完成了,可以看到此時(shí)虛擬機(jī)CPU的特性跟Host就差不多了:

更完整的分析參考關(guān)注微信公眾號(hào)。
本文來(lái)自博客園,作者:dolinux,未經(jīng)同意,禁止轉(zhuǎn)載

浙公網(wǎng)安備 33010602011771號(hào)