1.现象:虚拟机( Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz)编译出来的libpcap.so.1.9.1库和相关程序分别放到实体机1(Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz)和实体机2(Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz)运行,实体机1运行没有出现问题,但实体机2出现Illegal Instruction错误:

链接libpcap.so.1.9.1出现Illegal Instruction错误_数据

2.分析:

(1)Illegal Instruction含义

illegal instruction,即SIGILL, 是POSIX标准中提供的一类错误。 从名字上看,SIGILL是启动的某个进程中的某一句不能被CPU识别成正确的指令。 此类错误是由操作系统发送给进程的,在进程试图执行一些形式错误、未知或者特权指令时操作系统会使用SIGILL信号终止程序。 SIGILL对应的常数是4。

(2)可能诱发Illegal Instruction原因

诱发Illegal Instruction原因有很多种,比如将不正确的数据写入代码段,工具链bug,访存对齐或浮点数格式问题等,在本案例中,从运行情况看,多半是新体系结构中编译的可执行程序,在老机器上运行时会有illegal instruction问题。

3.解决:

在实体机2(Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz)搭建gcc这样开发环境,并对libpcap-1.9.1源码编译,编译出的库和程序放到实体机1和虚拟机都可以运行成功。