2013-08-12 85 views
0

我試圖用命令行編譯mach-o arm目標文件給mach-o arm可執行文件。我已經使用過這些不同的命令編譯Mach-o手臂目標文件

clang -arch armv7 helloapp.o -o helloapp 
clang helloapp.o -o helloapp 
gcc helloapp.o -o helloapp 

它們都返回不同的錯誤,說錯誤的體系結構編譯或缺少必要的文件。我需要正確編譯這個命令是什麼?

回答

0

默認編譯器($PATH中的默認編譯器)引用了可以爲本地機器編譯的編譯器。您需要一個知道如何創建ARM二進制文件的交叉編譯器。如果你有Xcode中的iOS SDK安裝就可以使用,例如:

PATH_TO_Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc 

PATH_TO_Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 

例如,我的機器上:

ARM_GCC=~/Documents/Xcode4.6.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc 
IOS_SDK=~/Documents/Xcode4.6.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk 

# Compile 
$ARM_GCC -arch armv7 -c test.c -o test.o 
# Link 
$ARM_GCC -arch armv7 -isysroot "$IOS_SDK" test.o -o test 

如果我再運行file test我得到:

test: Mach-O executable arm 
+0

我仍然得到相同的錯誤s告訴我「文件是爲armv7構建的,而不是被鏈接的架構」 – walsh06

+0

當鏈接時,您還需要傳遞'-arch armv7'!並相應地設置「isysroot」。看到我更新的答案。 – DarkDust

+0

好吧,那肯定比以前工作得更好。雖然「ld:library找不到-lcrt1.o」但出現錯誤 – walsh06