Сбой приложения Statusbar примерно каждые 20 минут [дубликат]

Преимущества super() в одиночном наследовании минимальны - в основном вам не нужно жестко закодировать имя базового класса во все методы, которые используют его родительские методы.

Однако использовать множественное наследование практически невозможно super(). Это включает в себя общие идиомы, такие как mixins, интерфейсы, абстрактные классы и т. Д. Это распространяется на код, который позже расширяет ваши. Если кто-то позже захотел написать класс, который расширил Child и mixin, их код не будет работать должным образом.

51
задан Alex Reynolds 11 January 2013 в 01:16
поделиться

6 ответов

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

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

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

31
ответ дан Alex Reynolds 22 August 2018 в 12:48
поделиться
  • 1
    Место для размещения этого флага находится в разделе «Другие флаги компоновщика» в настройках сборки проекта, например. -mmacosx-version-min=10.10. – Demitri 10 May 2017 в 14:52

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

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

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

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

15
ответ дан Community 22 August 2018 в 12:48
поделиться
  • 1
    Благодаря; эти два вопроса и связанные с ними ответы интересны, и я прочитал их перед тем, как задать вопрос, но я задаю этот вопрос, потому что ни одна из них не затрагивает эту ошибку, ее причину и почему использование этого флага является решением. Прежде чем я включил это в производство, я просто хочу убедиться, что я не нарушаю что-то для другого набора пользователей, скажем, и мне непонятно, есть ли какие-либо побочные эффекты. – Alex Reynolds 11 January 2013 в 01:22
  • 2
    Я бы предположил, что вам не следует беспокоиться, вы идете с намерением разработчиков системы. Есть хорошая цитата из Элементов стиля программирования , с которыми я столкнулся сегодня ... »« Попытка перехитрить компилятор сильно нарушает цель использования одного », – foundry 11 January 2013 в 09:30
  • 3
    Мое приложение CLI прекрасно работает в исходном каталоге, но при перемещении оно дает эту ошибку. Должно быть, что-то в моем коде, выходите из приложения раньше, и печать мира привет работает отлично. – Cristi Băluță 17 September 2016 в 05:34

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

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

2
ответ дан Jaguilar 22 August 2018 в 12:48
поделиться

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

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

0
ответ дан Pascal Engeler 22 August 2018 в 12:48
поделиться

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

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

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

15
ответ дан Community 22 August 2018 в 12:48
поделиться
  • 1
    Благодаря; эти два вопроса и связанные с ними ответы интересны, и я прочитал их перед тем, как задать вопрос, но я задаю этот вопрос, потому что ни одна из них не затрагивает эту ошибку, ее причину и почему использование этого флага является решением. Прежде чем я включил это в производство, я просто хочу убедиться, что я не нарушаю что-то для другого набора пользователей, скажем, и мне непонятно, есть ли какие-либо побочные эффекты. – Alex Reynolds 11 January 2013 в 01:22
  • 2
    Я бы предположил, что вам не следует беспокоиться, вы идете с намерением разработчиков системы. Есть хорошая цитата из Элементов стиля программирования , с которыми я столкнулся сегодня ... »« Попытка перехитрить компилятор сильно нарушает цель использования одного », – foundry 11 January 2013 в 09:30
1
ответ дан Kyle Redfearn 5 November 2018 в 10:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: