os版本歷史 - macos sierra




什麼是“非法指令:4”錯誤,為什麼“-mmacosx-version-min=10.x”修復它? (4)

“非法指令”消息只是告訴您,您的二進製文件包含指示您嘗試在其下運行它們的操作系統版本不明白。 我不能給你4的確切含義,但我希望這是Apple內部的。

否則看看這些...他們有點老了,但可能會告訴你你需要知道什麼

64位代碼如何在OS-X 10.5上運行?
macosx-version-min意味著什麼?

我得到了Illegal Instruction: 4在Mac OS X 10.8.2(“Mountain Lion”)下使用GCC 4.7.2編譯的二進製文件的Illegal Instruction: 4錯誤,當這些二進製文件在Mac OS X 10.7.x(“Lion”)和早期版本下運行時。 二進製文件在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.x修復了10.x和更大客戶端上的這個特定錯誤?

我想將這個修復程序應用到我的makefile中,但是在我扣動扳機之前想知道它是做什麼的。 (我會有更大的二進製文件嗎?我還有64位二進製文件嗎?我應該知道這種方法有什麼問題嗎?意想不到的副作用?等等)


來自Apple開發者論壇 (需要帳戶):

“編譯器和鏈接器能夠使用功能並執行不適用於較舊操作系統版本的優化。 -mmacosx-version-min告訴工具您需要使用哪些操作系統版本,因此這些工具可以禁用不能實現的優化在這些操作系統版本上運行。如果需要在較舊的操作系統版本上運行,則必須使用此標誌。

-mmacosx-version-min的缺點是應用程序的性能在較新的操作系統版本上可能會更差,如果它不需要向後兼容它可能會更糟。在大多數情況下,差異很小。”


我發現我的問題不合適
if (leaf = NULL) {...}
應該在哪裡
if (leaf == NULL){...}

檢查那些編譯器警告!


考慮到一點,我有意識地將這個答案寫成一個老問題,因為其他答案對我沒有幫助。

我得到了Illegal Instruction: 4在我編譯它的同一系統上運行二進製文件時,所以-mmacosx-version-min沒有幫助。

我在Mac OS X 10.11上的代碼塊16中使用gcc。

但是,關閉所有代碼塊的編譯器標誌以進行優化。 所以看看代碼塊設置的所有標誌(右鍵單擊項目 - >“構建屬性”)並關閉所有你確定不需要的標誌,特別是-s-O標誌進行優化。 這樣做對我而言。





osx-leopard