海湾合作委员会非法指导

GCC illegal instruction

本文关键字:非法 委员会      更新时间:2023-10-16

当我编译此代码时:

#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运行结果可执行文件,我得到此错误:

程序收到信号SIGILL,非法指令。 std::(anonymous namespace)::__x86_rdrand () at /build/gcc/src/gcc/libstdc -v3/src/c 11/random.cc:69 69 /build/gcc/src/gcc/libstdc -v3/src/c 11/random.cc:否此类文件或目录。

i使用 Arch Linux 与A Intel Core 2 Duo CPU T8100 。我该如何解决?

错误消息是"非法指令",而您获得的唯一提示是__x86_rdrand()。谷歌搜索RDRAND会导致RDRAND指令,这似乎已为Ivy Bridge处理器添加,您的Core 2 Duo肯定不是。(这是此图表上的penryn:https://en.wikipedia.org/wiki/template:intel_processor_oardmap(

好,所以您的CPU没有RDRAND。这意味着编译器必须具有错误的目标信息。使用GCC,要调整的标志为-march。就您而言,-march=core2应该这样做。也应该说 -march=native可以准确地针对您要编写的内容。