Предупреждение ld: инструкция subl стека слишком отличается от размера стека dwarf в OS X

недавно мы начали получать это предупреждение в нашей сборке OS X.

ld: warning:
could not create compact unwind for __Z10createMenuv: stack subl instruction is too different from dwarf stack size
ld: warning:
could not create compact unwind for __Z10del_modulejb: stack subl instruction is too different from dwarf stack size
could not create compact unwind for __Z14menu_patchbytev: stack subl instruction is too different from dwarf stack size

Я мог бы найти обсуждение этого в системе отслеживания ошибок Chromium, но предлагаемое «исправление» — отключить генерацию компактной раскрутки. Я хотел бы понять, почему возникает это предупреждение и является ли это проблемой в нашем коде или в цепочке инструментов.

Наша цепочка инструментов взята из Xcode 7.3.1:

Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0

person Igor Skochinsky    schedule 20.09.2016    source источник


Ответы (1)


Проведя некоторые исследования, лучший ответ, который я вижу, заключается в том, что проблема связана с набором инструментов, а не конкретно с вашим кодом.

Он строится как 32-битный вместо 64-битного. И чтобы решить эту проблему, вам нужно сделать одну из двух вещей:

  1. Используйте 64-битную версию цепочки инструментов xCode вместо 32-битной.
  2. Укажите правильный параметр во время компиляции, чтобы выдать код x86_64.

Вот почему некоторые рекомендуют разматывать, но я не вижу возможности подавить предупреждение о компактной размотке. Кажется, есть только возможность включить предупреждение -warn_compact_unwind.

Что вы можете сделать, так это подавить все предупреждения компоновщика, передавая параметр -Wl,-w компилятору.

Еще одно временное решение, которое вы можете попробовать, — передать -Wl,-no_compact_unwind в clang. Он должен указывать компоновщику не генерировать компактную раскручивающуюся информацию.

Наконец, попробуйте скомпилировать для 64-битной архитектуры. Для этого вы указываете архитектуру с опцией компилятора -arch — в вашем случае -arch x86_64. .

Я вижу, что большинство пользователей указывают на Xcode 7, а иногда на Xcode 6 возникают проблемы.

Кроме того, это можно исправить еще одним способом.

В настройках сборки проекта найдите «Параметры сборки» и установите «Нет» в параметре «Включить биткод». Я надеюсь, что это поможет вам.

person norcal johnny    schedule 01.10.2016
comment
мы не используем Xcode IDE, а компилируем из командной строки, используя make и драйвер gcc. - person Igor Skochinsky; 01.10.2016
comment
Кроме того, у нас есть это предупреждение для сборок x86 (-arch i386), а не для сборок x64 (-arch x86_64). - person Igor Skochinsky; 01.10.2016