2011-03-07 41 views
0

這需要很長時間才能解釋,但簡短的版本是我目前正試圖編譯ARMv7的LLVM GCC前端以編譯應用程序Cortex-A8(iPhone 3GS)。編譯libgcc(gcc編譯過程的一部分)時,我遇到了LD中的一個錯誤,這個錯誤一直讓我發瘋!GCC 4.2.1用於iPhone的Cygwin(Win7 64bit)編譯

的命令是這樣的:

/usr/llvm-gcc-4.2-2.8.source/build/./gcc/xgcc \ 
-B/usr/llvm-gcc-4.2_2.8.source/build/./gcc \ 
-B/usr/local/arm-apple-darwin/bin \ 
-B/usr/local/arm-apple-darwin/lib \ 
-isystem /usr/local/arm-apple-darwin/include \ 
-isystem /usr/local/arm-apple-darwin/sys-include \ 
-O2 -g -W -Wall -Wwrite-strings -wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -fno-inline -dynamiclib -nodefaultlibs -W1,-dead_strip \ 
-marm \ 
-install_name /usr/local/arm-apple-darwin/lib/libgcc_s.1.dylib \ 
-single_module -o ./libgcc_s.1.dylib.tmp \ 
-W1,-exported_symbols_list,libgcc/./libgcc.map 
-compatibility_version 1 -current_version 1.0 
-DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc \ 
... long list of .o files ... \ 
-lc 

而結果通常是很多的malloc,自由,退出等不確定引用這通常表示的libc不獲取編譯通過後去。 ld正在拋出的錯誤列表,我在頂部看到它正試圖拉入/usr/lib/libc.a並抱怨它不是正確的平臺。好吧,這很有道理,所以我花了5分鐘在谷歌上找到了答案。原來,如果我複製libSystem.dylib並將其重命名爲libc.dylib,那應該可以解決問題,但它不會。我無法在手機上找到該文件的副本,因此我直接從SDK中將其取出。然後我得到這個奇怪的錯誤:

ld64: in /usr/local/arm-apple-darwin/lib/libc.dylib, can't re-map file, errno=22 

在這一點上,我做了我能想到的一切。我從我的iphone中抓取了我的/ usr/lib文件夾的新副本,並確認libSystem.dylib(和libSystem.B.dylib)不在那裏。我爲iOS 4.2.1解壓原始的.ipsw包,並且再次找不到libSystem.dylib的副本。我解開了iPhoneSDK和MacOS SDK的包裝,我設法找到了它的一個副本,但是這個錯誤只是持續存在。我複製了libSystem.dylib,libSystem.B.dylib,嘗試了重命名到libc.dylib的各種組合,並且仍然只是錯誤。我無法找到一種方法讓它識別文件並與之鏈接。我也嘗試鏈接到位於iPhone SDK中的libc.a,但也沒有工作。我檢查了./xgcc正在發射什麼,這是我新建的arm-apple-darwin-ld64的副本,應該沒問題。

這裏有一點背景。我構建了LLVM + Clang 2.8,沒有出現任何錯誤,我重新修改了ODCCTools,並對其進行了一些修改,以便在Cygwin上編譯(如果能夠使其工作,我會將修改與補丁一起發佈到補丁中)。我還抓住了iphone-dev「includes」和「csu」項目以及那些成功完成的項目,雖然它們確實沒有意義,因爲我無法使它與crt0.a鏈接。我在這裏沒有想法了。

任何人都可以幫我解決這個問題嗎?

+0

我應該注意我已經多次檢查過命令行,並且我已經驗證了-l和庫之間沒有空格(谷歌上的每個搜索都表明這是錯誤) – 2011-03-07 15:17:25

回答

0

我想我可能已經發現了錯誤。在ODCCTools深處,在2905行的ld.cpp裏,它沒有重新映射文​​件(因此是一個很棒的消息)。由於該文件足夠小而不用擔心,因此我暫時刪除了重新映射並重新指定了指針。我會花一點時間,爲長期解決方案提供一個更好的解決方案(以及針對Cygwin工作的ODCCTools補丁)。

如果一切按計劃進行,那麼我將在今晚晚些時候在Cygwin下爲GCC編譯器交叉編譯iPhone。

+0

只是澄清一下,ARMv7編譯器不工作,並且默認使用ODCCTools進行通用ARM彙編。除此之外,一切正常,我發誓我稍後會發布HOWTO。 – 2011-03-08 11:33:36

+0

我知道這是一箇舊帖子,但我一直在尋找指令和/或補丁的高和低,以獲得svn odcctools針對iPhone 4s在cygwin工作。這是我發現的唯一帖子,想知道你是否曾經發布過「howto」? – crazyhatfish 2012-05-03 17:19:17