Что такое ошибка «Неверная инструкция: 4» и почему «-mmacosx-version-min = 10.x» исправить?

Я получаю Illegal Instruction: 4 ошибки с двоичными файлами, скомпилированными с GCC 4.7.2 в Mac OS X 10.8.2 («Горный лев»), когда эти двоичные файлы запускаются под 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 ошибка Illegal Instruction: 4 ?
  • Почему -mmacosx-version-min=10.x исправить эту конкретную ошибку на 10.x и более крупных клиентах?

Я хотел бы применить это исправление к своим файлам make-файлов, но хотел бы знать, что он делает, прежде чем я вытащу триггер. (Будут ли у меня большие двоичные файлы? У меня все еще есть 64-битные бинарные файлы? Есть ли проблемы с этим подходом, о которых я должен знать? Непреднамеренные побочные эффекты? И т.д.)

С форума разработчиков Apple (требуется учетная запись):

«Компилятор и компоновщик способны использовать функции и выполнять оптимизации, которые не работают с более старыми версиями ОС. -mmacosx-version-min сообщает инструментам, какие версии ОС вам нужны для работы, поэтому инструменты могут отключать оптимизации, которые не будут запускайте эти версии ОС. Если вам нужно запускать более старые версии ОС, вы должны использовать этот флаг.

«Недостатком версии -mmacosx-version-min является то, что производительность приложения может быть хуже на более новых версиях ОС, чем могла бы быть, если бы не требовалось быть обратно совместимым. В большинстве случаев различия незначительны».

Сообщение «незаконная инструкция» просто говорит вам, что ваши двоичные файлы содержат инструкции, которые версия ОС, которую вы пытаетесь запустить, не понимает. Я не могу дать вам точный смысл 4 но я ожидаю, что это будет внутренним для Apple.

В противном случае взгляните на них … они немного старые, но, вероятно, расскажут вам, что вам нужно знать

Как работает 64-битный код на OS-X 10.5?
что подразумевается в macosx-version-min?

Я сознательно пишу этот ответ на старый вопрос, имея в виду это, потому что другие ответы мне не помогли.

Я получил Illegal Instruction: 4 во время запуска двоичного -mmacosx-version-min в той же системе, на которой я ее скомпилировал, поэтому -mmacosx-version-min не помогло.

Я использовал gcc в Code Blocks 16 в Mac OS X 10.11.

Тем не менее, отключить все флаги компилятора Code Blocks для оптимизации. Итак, посмотрите на все флаги, установленные в блоке Code Block (щелкните правой кнопкой мыши Project -> «Build Properties») и отключите все флаги, которые вам точно не нужны, особенно -s и флаги -O для оптимизации. Это сделало это для меня.

Я обнаружил, что мой вопрос был неправильным
if (leaf = NULL) {...}
где это должно было быть
if (leaf == NULL){...}

Проверьте эти предупреждения компилятора!

Я недавно получил эту ошибку. Я скомпилировал двоичный код с -O3. Google сказал мне, что это означает «незаконный код операции», который казался мне подозрительным. Затем я отключил все оптимизации и повторил. Теперь ошибка превратилась в segfault. Следовательно, установив -g и запустив valgrind, я отследил источник и зафиксировал его. Возобновление всех оптимизаций не показало никаких дальнейших проявлений незаконной инструкции 4.

По-видимому, оптимизация неправильного кода может дать странные результаты.

  • Где OS X Mountain Lion хранит данные Notes?
  • Safari: как напрямую перейти от «omnibox» (т. Е. «Поле интеллектуального поиска») к результатам поиска (как в Chrome)?
  • Как исправить ошибки несоответствия версии pg_dump?
  • Получение ошибки при попытке настроить общие папки на экземпляре Ubuntu VMWare Fusion, работающем на OSX
  • Отправить уведомление в центр уведомлений о горном льве
  • Как смоделировать дисплей сетчатки (режим HiDPI) в Mac OS X 10.8 Mountain Lion на дисплее без сетчатки?
  • Предполагается, что запуск должен забрать «пропущенные» события?
  • Удаление приложений из служб определения местоположения в разделе «Безопасность и конфиденциальность» на Mac OS X 10.8
  • Как исследовать больше настроек по умолчанию для настройки на OS X?
  • Ошибка SVN при подключении с MacBook
  • Mac OS X Mountain Lion не может ping / telnet localhost. Укажите неправильный публичный IP-адрес
  • Давайте будем гением компьютера.