【发布时间】:2017-06-23 19:47:49
【问题描述】:
当我编译这段代码时:
#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 ()在 /build/gcc/src/gcc/libstdc++-v3/src/c++11/random.cc:69 69 /build/gcc/src/gcc/libstdc++-v3/src/c++11/random.cc: 没有这样的文件或目录。
我将 arch linux 与 Intel Core 2 Duo CPU T8100 一起使用。 我该如何解决这个问题?
【问题讨论】:
-
您是否有可能为比您现有的更新的 CPU 编译代码,因此 GCC 使用了您的 CPU 没有的一些指令?
-
检查堆栈,获得此(非法指令)的最简单方法是通过运行数组或类似(任何UB)来践踏返回地址。然后返回到一个不包含有效指令的地址。
-
添加示例代码
-
@Zeldhoron that doesn't crash for me: wandbox.org/permlink/vXUD7pgnoAptd2Pt 运行该确切代码在您的计算机上崩溃?
-
请提供您使用的准确编译器命令行。