2014-03-19 16 views
3

32位架構,因爲我更新的Xcode 5.1,這會改變標準的架構,還包括arm64,我一直從連接器收到以下錯誤:也能收到上的Xcode 5.1鏈接錯誤,儘管恢復到僅

0 0x109157f93 __assert_rtn + 144 
1 0x1091faed4 ld::passes::stubs::Pass::makeStub(ld::Atom const&, bool) + 0 
2 0x1091fb5f7 ld::passes::stubs::Pass::process(ld::Internal&) + 497 
3 0x1091fbc07 ld::passes::stubs::doPass(Options const&, ld::Internal&) + 111 
4 0x109158b50 main + 772 
5 0x7fff8568b5fd start + 1 
A linker snapshot was created at: 
    /tmp/MyApp-2014-02-19-175731.ld-snapshot 
ld: Assertion failed: (target != NULL), function stubableFixup, file /SourceCache/ld64/ld64-236.3/src/ld/passes/stubs/stubs.cpp, line 126. 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

鑑於我使用僅爲armv7編譯的第三方庫,我嘗試將「體系結構」和「有效體系結構」選項設置爲僅包含項目和目標的構建設置中的armv7,但我仍然收到錯誤清潔......任何想法?

謝謝!

回答

3

在我的情況下,解決方案(相當於解決方法)是在「生成設置」的「鏈接」部分中禁用Dead Code Stripping功能。

Xcode 5.1似乎有一個關於這個功能和Link Time Optimization的錯誤(我已經設置爲NO)。

更多信息可以在這裏找到:https://devforums.apple.com/message/950372#950372

編輯(2014年4月18日):

這個問題似乎要解決的問題的Xcode 5.1.1,如轉動Dead Code Stripping標誌後面選擇「是」不會再導致鏈接錯誤。

0

正好遇到了同樣的錯誤,

你想要做的是去項目構建設置,並設置「建設活動體系結構只」來NO用於調試以及發佈。 。 。

這將讓你去:-)

+0

不幸的是,我已經將該標誌設置爲NO,無論是在項目中還是在Target的構建設置中! – micamoita

0

我希望這不是太遠的問題,但值得注意的是,你可以保留舊的SDK升級左右的Xcode後使用。這不是一個壞主意,備份以下文件夾在升級之前的內容:

$(xcode-select --print-path)/Platforms/*/Developer/SDKs 

舊的SDK可以在升級後會被複制回。顯然,最好儘可能使用最新的SDK,但有時限期和開發實際情況使得必須繼續使用可用的SDK,直到代碼可以重新工作。

該過程也可以半自動執行。只需安裝在新位置的最新的Xcode版本(保留舊版本不變),並與下面的腳本鏈接現有的軟件開發工具包:

platforms_path="$1/Contents/Developer/Platforms"; 
if [ -d $platforms_path ]; then 
    for platform in `ls $platforms_path` 
    do 
     sudo ln -sf $platforms_path/$platform/Developer/SDKs/* $(xcode-select --print-path)/Platforms/$platform/Developer/SDKs; 
    done; 
fi; 

你只需要與路徑老.app爲它供給:

在這個問題上
./xcode.sh /Applications/Xcode-463.app 

的更多信息:

你可以在這裏找到Xcode中的舊版本:

+0

感謝您的回答,這是非常有益的,即使不是真正解決基本問題的方法! – micamoita

1

我只是有相同的錯誤消息對我的應用程序之一,並且固定它爲我的唯一的事情就是改變鏈接 - 時間優化

+0

我已將它設置爲NO ...謝謝! – micamoita