什么是“非法指令:4”错误?为什么“ -mmacosx-version-min = 10.x”

我得到Illegal Instruction: 4在Mac OS X 10.8.2(“山狮”)与GCC 4.7.2编译的二进制文件,当这些二进制文件在Mac OS X 10.7.x(“狮子”)和早期版本的运行错误。这些二进制文件在Mac OS X 10.8.x下可以正常工作。

我添加-mmacosx-version-min=10.5了编译标志,无论该问题是什么,这似乎都有助于解决10.5.x,10.6.x和10.7.x客户端的问题。

哪个引起了我的问题:

  • 有什么Illegal Instruction: 4错误?

  • 为什么要-mmacosx-version-min=10.x10.x更多的客户上解决此特定错误?

我想将此修复程序应用于我的makefile,但想知道在执行触发器之前它在做什么。(我将拥有更大的二进制文件吗?我还会有64位二进制文件吗?我应该了解这种方法的陷阱吗?意外的副作用?等等。)


繁华开满天机
浏览 828回答 3
3回答

汪汪一只猫

从苹果开发者论坛(需要帐户):“编译器和链接器能够使用某些功能,并执行在较旧的OS版本上不起作用的优化。-mmacosx-version-min告诉工具您需要使用哪个OS版本,因此这些工具可以禁用那些不能在这些OS版本上运行的优化。如果需要在较早的OS版本上运行,则必须使用此标志。“不利的一面-mmacosx-version-min是,在较新的OS版本上,该应用的性能可能会更差,如果不需要向后兼容,则性能可能会下降。在大多数情况下,差异很小。”

侃侃无极

“非法指令”消息只是告诉您二进制文件包含指令,您尝试在其下运行的操作系统版本不理解。我不能给您确切的含义,4但是我希望这是Apple内部的。否则看看这些...它们有些旧,但是可能告诉您您需要知道什么

繁星点点滴滴

考虑到这一点,我有意识地将这个答案写在了一个老问题上,因为其他答案并没有帮助我。我Illegal Instruction: 4在编译二进制文件的同一系统上运行二进制文件,因此-mmacosx-version-min没有帮助。我在Mac OS X 10.11的代码块16中使用了gcc。但是,关闭所有代码块的编译器标志以进行优化是可行的。因此,请查看所有设置了代码块的标志(右键单击Project->“ Build Properties”),然后关闭所有您确定不需要-s的-O标志,尤其是用于优化的标志。对我来说就做到了。
打开App,查看更多内容
随时随地看视频慕课网APP