2012-03-27 102 views
10

在試圖編譯的iPhoneOS的虛擬程序,Xcode4,GCC不會出現超越最初SYSROOT目錄在/usr/lib/system/libcache.dylib,缺少必需架構的ARMv6

$ echo $ISYSROOT 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk 
$ gcc -arch armv6 --sysroot=$ISYSROOT test.cpp 
ld: in /usr/lib/system/libcache.dylib, missing required architecture armv6 in file for architecture armv6 
collect2: ld returned 1 exit status 

如果我離開了sysroot,

$ gcc -arch armv6 test.cpp 
ld: warning: ignoring file /usr/lib/crt1.o, missing required architecture armv6 in file 
ld: warning: ignoring file /usr/lib/libgcc_s.1.dylib, missing required architecture armv6 in file 
ld: warning: ignoring file /usr/lib/libSystem.dylib, missing required architecture armv6 in file 
Undefined symbols for architecture armv6: 
    "start", referenced from: 
    -u command line option 
ld: symbol(s) not found for architecture armv6 
collect2: ld returned 1 exit status 

以下的作品,但它感覺很俗氣,而且不可擴展。這裏發生了什麼?

$ gcc -arch armv6 -L$ISYSROOT/usr/lib/system --sysroot=$ISYSROOT test.cpp 

更新。顯然,這是一個已知的問題,但它仍然是不清楚如何SYSROOT傳遞給GCC,但isysroot到LD

http://www.doitscared.com/?m=201104

當編譯庫,如果你看到這個錯誤「LD:文件不發現: /usr/lib/system/libcache.dylib爲架構armv7「,那麼您的 鏈接器命令使用」-sysroot「,它在Xcode 4中不起作用。 而是將鏈接器命令更改爲使用」-isysroot 」。 (注:此 僅適用於連接器的命令的編譯命令時必須繼續 使用「-sysroot」在這裏看到更多的細節。)

+0

謝謝! $ gcc -arch armv6 -L $ ISYSROOT/usr/lib/system --sysroot = $ ISYSROOT test.cpp對我有幫助! – 2012-11-13 09:00:10

回答

0

更改項目的部署目標是至少4.3它會工作。這是XCode 4的一個問題,但實際上不需要將應用程序部署到4.3之前的iOS版本。 iOS用戶傾向於保持iOS版本的最新狀態。

+0

我被困在4.2.1上,舊的iOS設備無法升級過去那一點 - 我只是想爲它編譯ncurses。什麼也沒有。 – Wyatt8740 2014-08-20 02:57:45