当我编译这段代码时:
#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;
}
Run Code Online (Sandbox Code Playgroud)
然后尝试运行生成的可执行文件,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 : 没有相应的文件和目录.
我使用带有Intel Core 2 Duo CPU T8100的arch linux.我该如何解决?
错误消息是"非法指令",您获得的唯一提示是__x86_rdrand().谷歌搜索rdrand导致RDRAND指令,它似乎是为Ivy Bridge处理器添加的,你的Core 2 Duo肯定不是.(这是图表上的Penryn:https://en.wikipedia.org/wiki/Template:Intel_processor_roadmap)
好的,所以你的CPU没有RDRAND.这意味着编译器必须具有关于其目标是什么的错误信息.对于GCC,要调整的标志是-march.在你的情况下,-march=core2应该这样做.也可以说-march=native,它将准确定位您正在编译的内容.
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |