我在gcc 4.4.7-17上有问题。我在服务器上编译了一个程序,然后在另一台服务器上运行了该程序,但由于非法指令而崩溃了。
我怀疑这两个服务器之间的差异可能会导致此异常。是的,我发现服务器编译程序具有CPU标志bmi1和bmi2,但是运行该程序的服务器却没有!
使用gcc时如何禁用bmi指令?
-mbmi
并且-mbmi2
默认情况下未启用。
您可能通过-march=native
在具有与目标计算机不同硬件的服务器上进行构建来启用它们。不要那样做 使用-O3 -march=ivybridge
或-march=bdver2
(AMD Piledriver = Bulldozer第2版),或使用适合于制作二进制文件的二进制文件,这些二进制文件可以使用目标支持的所有指令集扩展,并针对目标进行了调整。(-march=x
表示-mtune=x
)。
另外,如果可能,请使用较新版本的gcc。4.4现在已经很老了。gcc 5.3是gcc5系列的最新版本,在许多情况下可以提供更好的代码。
gcc6也已发布,但是还没发布。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句