【illegal instruction解决】

问题描述

1、 调用了别人编译的第三方库so,集成到自己的程序中编译没有任何问题,运行程序会报错illegal instruction,并产生core文件。
2、 在一台机器上编译好的可执行文件,放到相同架构相同系统的机器上跑会报illegal instruction错误
ERROR: Illegal instruction (core dumped)
所谓 Illegal instruction (错误指令),表示处理器(CPU)收到了一条它不支持的指令
大多数情况下,是因为程序采用了特定的优化编译,需要依赖一定(新型)的CPU指令集。例如,一些近期的tensorflow构建都是假设你的CPU支持 AVX 指令,而对于早于2011年的处理器或者低端x86 CPU(Pentium, Celeron, Atom)都不支持AVX指令集。

原因分析:

保证在本身程序没有错误的前提下,在编译的时候用了优化指令,使用了-march=native对三方库做优化。把这个优化选项去掉之后,程序就能正常运行了。这个指令的具体作用如下:
-march=native 是一个 GCC 和 Clang 编译器的命令行选项,用于指导编译器为当前机器的具体型号生成优化后的代码。
作用:
指定目标架构:编译器会检测运行编译命令的机器的 CPU 类型,并使用适用于该 CPU 的优化选项。
启用特定指令集:例如,如果您在支持 AVX2 的机器上使用 -march=native,那么编译器会允许生成使用 AVX2 指令的代码。
优点:
性能优化:为特定的 CPU 生成的代码可以更好地利用该 CPU 的特性和指令集,从而可能带来性能上的提升。
自动化:不需要手动指定目标架构或其他相关的标志。编译器会自动探测并决定最佳选项。
缺点:
不可移植性:使用 -march=native 编译出的程序可能在与编译它的机器具有不同 CPU 的机器上无法运行,或者性能下降。这是因为生成的代码可能依赖于某些只存在于特定 CPU 上的指令。
兼容性问题:如果您编译的程序需要在多种硬件平台上运行,使用 -march=native 可能不是一个好主意。因为它可能生成仅针对某一特定硬件优化的代码,而不是一种更为普遍、兼容的代码形式。
预期之外的效果:在某些情况下,尽管理论上 -march=native 应该提供最佳性能,但由于各种原因(例如,CPU 的微体系结构、缓存大小等),可能不会看到明显的性能提升,或者性能甚至可能会下降。
总的来说,使用 -march=native 可能会为特定的机器带来性能上的优势,但可能会牺牲掉代码的可移植性。在决定是否使用此选项时,建议进行性能测试并仔细考虑目标平台。

解决方案:

去掉 -march=native

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "illegal instruction (core dump)" 意思是程序在运行时遇到了非法指令,导致程序崩溃,并生成了一个 "core dump" 文件。这通常是由于程序代码中存在错误或者程序使用了不兼容的硬件或操作系统功能导致的。 ### 回答2: illegal instruction (core dump)是指某个程序在执行时出现了非法指令,并因此导致崩溃,并生成核心转储文件(core dump)。这个错误需要通过分析崩溃现象来确定原因。 首先,我们需要查阅相关的错误日志,以及检查程序运行的相关环境,包括操作系统版本、CPU架构、程序编译器版本等。这有助于我们快速锁定原因。 一般情况下,illegal instruction (core dump)是由于程序在执行时执行了不支持的指令,或是执行了内存损坏的代码造成的。这些情况通常是由程序员在编写代码时没有考虑到特定环境下的限制,或是代码中出现了缺陷导致的。 针对这个错误,我们可以通过以下几个方式进行修复: 1.升级程序编译器或运行环境,并重新编译程序。这能够保证在新的环境下程序能够正确执行。 2.检查代码,确认代码中没有出现不支持的指令或内存损坏等问题。 3.通过使用调试工具,如GDB等,来跟踪程序的执行过程,定位到具体的错误代码,并修改代码以避免出现这些问题。 总之,illegal instruction (core dump)是一个常见的程序错误,需要通过仔细的分析和调试才能够解决。在编写程序时,我们需要考虑到不同运行环境的限制,并尽可能避免出现缺陷,以提高程序的稳定性和可靠性。 ### 回答3: Illegal instruction (core dump)是一种计算机错误。简而言之,计算机执行了无法理解的指令,并且因为这个错误导致程序的终止。这种错误通常会生成一个core dump文件,这个文件包含了程序崩溃时的内存状态,可以用于调试程序。 Illegal instruction错误通常是由于以下几种原因引起的: 1.硬件损坏:如果CPU或者内存损坏或者出现故障,计算机就可能执行不正常的指令,导致Illegal instruction错误。 2.软件更新:如果操作系统或者应用程序发生更新,但是旧程序与新程序不兼容,就可能导致Illegal instruction错误。 计算机会尝试执行无法识别或无法理解的操作码。 3.编译错误:编译器将代码转换成机器指令,如果编译器生成了错误的指令,就可能导致Illegal instruction错误。 如何解决Illegal instruction错误?这需要根据具体情况来定。可能需要检查计算机硬件是否正常,重新安装相关软件,或者对程序进行调试。确保代码正确,任何未定义的行为都被考虑到。 同时保持软件和硬件更新到最新版本可以预防这种错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值