7

うまくいけば、簡単な質問です。コマンドラインからclangを使用して、基本的なObjective-Cコンパイルを学ぼうとしています。複雑なプロジェクトでは Xcode の方が優れたソリューションであることは理解しており、近いうちに Xcode に移行する予定ですが、個人的には、ターミナルで手動でコンパイルできれば言語をよりよく理解できると感じています。新しいプロジェクトを開始するよりも、端末でコンパイルするのが面倒です。

問題は、複数のファイルで構成される Objective-C プログラムを (コマンド ラインから) コンパイルするにはどうすればよいかということです。(Kochan の教科書の第 7 章の分数プログラムを、#import "Fraction.h" の両方を含む main.m および Fraction.m ファイルと、Foundation フレームワークをインポートする Fraction.h ファイルを使用して実行しようとしています。)単一のファイルをコンパイルするには、次のようなものを使用します

clang -fobjc-arc main.m -o prog1

しかし、それを入力して main.m 以外のファイルをプロジェクトに含めたい場合、次のようなエラーが発生します。

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

次のように、追加のファイルを引数としてコマンドに追加しようとすると

clang -fobjc-arc main.m Fraction.h Fraction.m -o prog1

それから私は得る

clang: error: cannot specify -o when generating multiple output files

そして、次のように -o 引数を削除すると

clang -fobjc-arc main.m Fraction.h Fraction.m

次に、すべてが基盤フレームワークを参照する巨大なエラーの山を取得し、最終的に「致命的なエラー: 発行されたエラーが多すぎて、現在停止しています」で終了します。

これを行うにはどうすればよいですか? それとも、複数のファイルが関係している場合は、すぐにそれを吸い上げて Xcode を使用する必要がありますか?

4

2 に答える 2

8

インターフェイス/インクルード ファイルではなく、実装ファイル (*.m) のみがコンパイルされるため、これは機能するはずです。

clang -fobjc-arc main.m Fraction.m -o prog1

「複数の出力ファイルを生成しています」という奇妙なエラー メッセージは、clang がヘッダー ファイルを「プリコンパイル済みヘッダー ファイル」にコンパイルすることもできるという事実が原因である可能性があります。

于 2013-05-08T17:47:21.150 に答える
2

Fraction.hソースファイルとして指定しないでください。そうではなく、ヘッダーファイルです。

また、ほぼ確実に投入したいと考えてい-framework Foundationます。他のフレームワークを使用する場合は、おそらくこれらも指定する必要があります。

于 2013-05-08T17:46:36.400 に答える