2011-09-19 1 views
16

上のgcc経由のiOS Objective-Cのコマンドラインアプリケーションをコンパイルします。はここで非常に単純なObjective-CのコンソールアプリケーションであるMAC

私のMacにはiOS SDKがインストールされています。このコマンドを変更するには、私のコンピュータと同じコードをコンパイルして、(jailbroken)iOSデバイスで使用しますか?

次に、実行可能ファイルをsshで転送し、ldidで署名することができます。

答えて

4

はコンパイルのために次のことを明らかにした:

/開発/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -x objective-c -arch armv6 -fmessage-length = 0 -fdiagnostics-print-source-range-info -fdiagnostics-show-category = id - fdiagnostics-parseable-fixits -std = gnu99 -Wno-trigraphs -fpascal-strings -O0 -Wissing-prototypes -Wreturn-type -Wraphesises -Wswitch -Wno-unused-parameter -Wunu SED-可変-Wunused値 -DDEBUG = 1 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -gdwarf-2 -mthumb「-DIBOutlet = 属性((iboutlet ))」 "-DIBOutletCollection(クラス名)= 属性((iboutletcollection(クラス名)))" "-DIBAction =ボイド)属性((ibaction)" -miphoneosバージョン分= 3.2 -iquote [ -I [インクルードパス] -I [ヘッダーのリスト] -iquote [more ヘッダー] -I [インクルードパス] -fpch-preprocess -F [デバッグファイル用のディレクトリ へのポインタ] -include [my prefix header] -c AppDelegate.m -o AppDelegate。 o

あなたがXcodeの使用を断念しているのであれば、少なくともInterface Builderアウトレットについての情報を減らすことができると思います。そしてv7ではなくarmv6のためのビルドは私のプロジェクトではおそらくエラーです。

そして、リンクへ:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -arch ARMv6の-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/ SDK/iPhoneOS4.3.sdk -L [何か適切な] -F [何かが適切な] -filelist [a .LinkFileList] -dead_strip -miphoneos-version-min = 3.2 -framework SystemConfiguration -framework UIKit -framework Foundation -framework CoreGraphics -o [何か適切]

.LinkedFileListファイルは、1行に1つずつ、オブジェクトファイルのリストのように見えます。 Xcodeはそこにそれぞれ完全なパスを入れましたが、私は相対パスを受け入れられると思っていました。

これは完全な回答ではありませんが、うまくいけばそれは役に立ちますか?

2

gccに直接電話するのではなく、xcodebuildを使用しないのはなぜですか? Xcodeのは、使用するコマンドラインを明らかにする位置に入るように、あなたが意図的に私のプロジェクトでエラーをトリガ、fusty古いGCCに結婚していないと仮定すると、

+0

を使用してコンパイルしていますことは 'ないですxcodebuild'はXcodeプロジェクトのみをコンパイルするためのものですか?私はXcodeの使用を避ける方法を知りました。 – Klaus

+4

ああ。確かに。次に、これを行うことができます:iOS Xcodeプロジェクトを作成し、コマンドラインから 'xcodebuild'を呼び出して、彼がコマンドラインで実行しているgccへの呼び出しを観察します。そして、あなたはどのコマンドラインパラメータを使うのかを知ることができるはずです...ナードは 'xcodebuild'を使わずに' gcc'を使って自分で使うことができるはずです – AliSoftware

+0

これは**私が探していたものです。 – To1ne

18

簡単な例では、これは十分に良いかもしれません:

gcc -o output -Wall -std=c99 source.m -framework Foundation -lobjc 

更新:

このコマンドは、iOSコマンドラインアプリケーションでは動作しません - アーチを正しく設定する必要があります。私は現時点ではiOSの開発環境を持っていません。おそらく-marchフラグが役に立ちます。

回答を参照してください。

+0

ニース!これは動作します;) – diegocaro

+0

'gcc'を' clang'に置き換えることもできます。 –

+1

@keith:これはおそらく正しい将来の答えです。 Appleはある時点でclangの周りにgccラッパーの出荷を停止するかもしれない。 – radiospiel

4

MacでiOSコードをコンパイルするには、クロスプラットフォームのコンパイラ、つまりIntelプラットフォーム上で実行され、ARMバイナリコードを生成できるコンパイラを使用する必要があります。

Xcodeはこのようなクロスコンパイラを提供しています。これは、プログラムの簡単な、 "Hello World" の種類について

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 

(あなたがApp Storeでから配信のXcode 4.3を使用していると仮定した場合)に配置されて、私は

alias c="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2" 
c -o hello hello.c -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/ 
+0

それはうまくいった!ありがとう! – daviewales

関連する問題