首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GCC非法教学

GCC非法教学
EN

Stack Overflow用户
提问于 2017-06-23 19:47:49
回答 1查看 2.5K关注 0票数 2

当我编译这段代码时:

代码语言:javascript
运行
复制
#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,非法指令。/build/gcc/src/gcc/libstdc++-v3/src/c++11/random.cc:69 69 /build/gcc/src/gcc/libstdc++-v3/src/c++11/random.cc:上的std::(anonymous namespace)::__x86_rdrand ()没有这样的文件或目录。

我使用与英特尔核心2双CPU T8100。我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-23 20:45:40

错误消息是“非法指令”,您得到的唯一提示是__x86_rdrand()。谷歌rdrand导致了RDRAND指令,它似乎是为常春藤桥处理器添加的,而你的Core2Duo肯定不是。(这是图上的Penryn:路线图)

好吧,你的CPU没有RDRAND。这意味着编译器必须对它的目标有错误的信息。对于GCC,需要调整的旗子是-march。在您的例子中,-march=core2应该这样做。也可以说是-march=native,它将精确地针对您正在编译的内容。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44728951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档