我遇到gcc 4.4.7-17的问题。我在服务器上编译了一个程序,并在另一个服务器上运行了这个程序,但由于非法指令而崩溃了。
我怀疑两台服务器之间的区别可能会导致此异常。是的,我发现服务器编译程序有CPU标志bmi1和bmi2,但是运行该程序的服务器并没有!
使用gcc时如何禁用bmi指令?
答案 0 :(得分:2)
<tr>
和-mbmi
默认情况下未启用。
您可能通过在与目标计算机具有不同硬件的服务器上使用-mbmi2
构建来启用它们。不要这样做。 Use -O3 -march=ivybridge
or -march=bdver2
(AMD Piledriver = Bulldozer version 2), or whatever is appropriate制作二进制文件,可以使用目标支持的所有指令集扩展,并针对您的目标进行调整。 (-march=native
暗示-march=x
)。
此外,如果可能,请使用较新版本的gcc。 4.4现在已经很老了。 gcc 5.3是gcc5系列中的最新版本,在许多情况下可以生成更好的代码。
gcc6也已发布,但还没有发布。