什么是"非法指令:4"错误,为什么"-mmacosx-version-min = 10.x"修复它?

Ale*_*lds 64 macos gcc osx-leopard osx-lion osx-mountain-lion

Illegal Instruction: 4当在Mac OS X 10.7.x("Lion")和早期版本下运行这些二进制文件时,我在Mac OS X 10.8.2("Mountain Lion")下使用GCC 4.7.2编译的二进制文件出错.二进制文件在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位二进制文​​件吗?我应该知道这种方法有什么问题吗?意想不到的副作用?等等)

Ale*_*lds 36

来自Apple开发者论坛(需要帐户):

"编译器和链接器能够使用功能并执行不适用于旧操作系统版本的优化.-mmacosx-version-min告诉工具您需要使用哪些操作系统版本,因此这些工具可以禁用不在这些操作系统版本上运行的优化.如果需要在较旧的OS版本上运行,则必须使用此标志.

"不利的-mmacosx-version-min一点是,应用程序的性能在较新的操作系统版本上可能会更差,如果它不需要向后兼容它可能会更糟.在大多数情况下,差异很小."

  • 放置此标志的位置位于项目构建设置中的“其他链接器标志”下,例如“-mmacosx-version-min=10.10”。 (3认同)

fou*_*dry 18

"非法指令"消息只是告诉您,您的二进制文件包含指示您尝试在其下运行它们的操作系统版本不明白.我不能给你准确的含义,4但我希望这是Apple内部的.

否则看看这些......它们有点旧,但可能会告诉你你需要知道什么

64位代码如何在OS-X 10.5上运行?
macosx-version-min意味着什么?

  • 我建议你不要担心,你的意图是系统设计师的意图.有一个很好的引用来自_Elements of Programming Style_我今天遇到过......"试图超越编译器会失去很多使用它的目的" (2认同)

小智 5

考虑到一点,我有意识地写了一个老问题的答案,因为其他答案对我没有帮助。

Illegal Instruction: 4在编译它的同一个系统上运行二进制文件,所以-mmacosx-version-min没有帮助。

我在 Mac OS X 10.11 上的代码块 16 中使用 gcc。

但是,关闭所有代码块的编译器标志以进行优化工作。因此,查看代码块设置的所有标志(右键单击“项目”->“构建属性”)并关闭所有您确定不需要-s-O标志,尤其是优化标志。那是为我做的。


小智 5

我发现我的问题不
if (leaf = NULL) {...}
正确
if (leaf == NULL){...}

检查那些编译器警告!

  • 你知道有时被戏称为“=”运算符吗?''叶子是NULL吗?就是现在!' (3认同)