2016-09-20 87 views
6

最近我們開始在我們的OS X版本上得到這個警告。ld警告:堆棧子指令與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 

我能找到的鉻bug跟蹤系統,但建議「修復」的這一些討論是禁用緊湊的展開產生。我想知道爲什麼會發生此警告,並且這是我們的代碼或工具鏈中的問題。

我們的工具鏈是在Xcode 7.3.1:

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

回答

0

在做一些研究,最好的答案,我看到有一個問題與工具鏈,而不是你的代碼明確。

它構建爲32位,而不是64位。而要解決這個問題,你需要做兩件事情之一:

  1. 使用的Xcode工具鏈的64位版本,而不是32位 之一。
  2. 爲了編譯過程中提供適當的選項發出x86_64的 代碼

這就是爲什麼有些建議平倉,但我沒有看到任何選項禁止有關緊湊放鬆身心的警告。似乎只有一個選項才能啓用警告-warn_compact_unwind

你可以做的是通過抑制所有-Wl連接警告,-w選項編譯器。

另一種治標不治本的,你可以嘗試在流逝-Wl,-no_compact_unwind以鏗鏘。它應該指示鏈接器不要生成緊湊的展開信息。

最後,嘗試編譯64位體系結構。爲此,您可以使用-arch編譯器選項指定體系結構 - 對於您的情況,請指定-arch x86_64。 。

我看到大多數用戶指向的Xcode 7,有時Xcode中6成爲問題的基礎之上。

此外,還有一種其他的方法來解決這個問題。

在項目生成設置找到編譯選項,並設置在沒有選項 啓用位碼。我希望它對你有所幫助。

+0

我們不使用的Xcode IDE,但使用'make'和'gcc'駕駛員命令行編譯。 –

+0

也是,我們對x86('-arch i386')構建有這個警告,而不是x64('-arch x86_64')。 –