当我编译这段代码时:

#include <random>
#include <iostream>

int main(int argc, char** argv)
{
    std::random_device dev;
    std::mt19937 mt(dev());
    std::cout << mt() << std::endl;
    return 0;
}

然后尝试使用gdb运行生成的可执行文件,我得到此错误:



我将Arch Linux与Intel Core 2 Duo CPU T8100一起使用。
我该如何解决?

最佳答案

错误消息是“非法指令”,唯一的提示是__x86_rdrand()。谷歌搜索rdrand导致了RDRAND instruction,它似乎是为Ivy Bridge处理器添加的,Core 2 Duo肯定不是。 (此图表上为Penryn:https://en.wikipedia.org/wiki/Template:Intel_processor_roadmap)

好的,因此您的CPU没有RDRAND。这意味着编译器必须了解有关目标对象的错误信息。使用GCC时,要调整的标志是-march。在您的情况下,-march=core2应该这样做。说-march=native也是可以的,它将精确地针对您正在编译的内容。

关于c++ - GCC非法指示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44728951/

10-10 21:22