當我編譯此代碼:GCC非法指令
#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
運行生成的可執行文件我得到這個錯誤:
Program received signal
SIGILL
, Illegal instruction.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: No such file or directory.
我用Arch Linux的有英特爾酷睿2雙核CPU T8100。 我該如何解決這個問題?
你是否曾經編譯過比你有更高CPU的代碼?GCC使用了你的CPU沒有的一些指令? –
檢查堆棧,得到這個(非法指令)的最簡單方法是通過運行一個數組或類似的(任何UB)來對一個返回地址進行踐踏。然後返回到一個不包含有效指令的地址。 –
添加了示例代碼 – Zeldhoron