私はこのコードをコンパイルします。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.
をアーチとLinuxの Intel Core 2 Duo CPU T8100 これを修正するにはどうすればよいですか?
GCCがあなたのCPUにない命令を使用していたより新しいCPUのコードをコンパイルしましたか? –
スタックを調べると、これを得る最も簡単な方法は、配列など(任意のUB)を実行してリターンアドレスを踏みにじることです。その後、有効な命令を含まないアドレスに戻ります。 –
サンプルコード – Zeldhoron