4

私はCodeRunnerを使用して、開発中に頻繁に使用されるコードの小さなチャンクを収集してきましたが、必ずしもプロジェクトのコードベースに属しているとは限りません。マシンにインストールされているフレームワークを含めることができるため、Objective-C と Cocoa で要約するための優れたツールです。

ただし、ASIHTTPRequest など、フレームワークではない外部ソースからの機能を含めたい場合があります。ASIHTTPRequest ファイルを近くのフォルダーに配置すると、#includeエラーが発生します。"Undefined symbols for architecture x86_64: _OBJC_CLASS_$_ASIHTTPRequest"これは、ASI ファイルがコンパイルされておらず、CodeRunner doc とリンクされていないことを意味すると想定しています。これは、コンパイルされている単一のファイルであり、事業。Xcode では、ASIHTTPRequest ファイルをプロジェクトに追加すると、それらは自動的にコンパイルされ、残りのコードとリンクされます。Xcode を使用していない場合と同等のものは何ですか?

カスタム引数とコンパイル フラグ (後者には-std=c99 -framework Foundationデフォルトで含まれています) を含めることができますが、これらをどうにか調整する必要があると思われますが、その方法を見つけることができませんでした。

4

1 に答える 1

3

私はそれを働かせました。もちろん、gcc には、ASIHTTP モジュールにリンクするための追加パラメーターが必要です。これが私が最終的に得たものです:

-std=c99 -framework SystemConfiguration -framework CoreServices -framework Foundation -lz -I/path/to/asi-header-files -filelist /path/to/list-of-asi-compiled-modules

あなたのコードには、ASIHTTPRequest.h などのヘッダー ファイルへのパスが含まれているだけだと思います...そこで明示的なパスを使用している場合は、上記の -I スイッチは必要ありません。gcc は、リンクするために ASIHTTPRequest.m および友人からのコードのコンパイル済みバージョンを持っている必要があります。これを行う 1 つの方法は、ライブラリに付属の「Mac」プロジェクトをコンパイルすることです。これにより、Xcode が好んで作成する、深く埋もれた「DerivedData」ディレクトリの 1 つに .o ファイルが生成されます。それが私のために作ったものは次のとおりです:

~/Library/Developer/Xcode/DerivedData/Mac-flsjygxmngizhzfwnfgcakejmwkx/Build/Intermediates/Mac.build/Debug/Mac.build/Objects-normal/x86_64

(「Mac-flsjygxmngizhzfwnfgcakejmwkx」のビットは、あなたにとっては異なると思います。) そのディレクトリには、多数の .o ファイルと 'Mac.LinkFileList' ファイルがあります。このファイルは、gcc の -filelist パラメーターに指定するファイルです。リンク手順で重複シンボル エラーが発生しないように、main.o、AppDelegate.o、および ASIWebPageRequest.o ファイルへの参照を削除する必要があります。

ASIHTTPRequest にはこれらの依存関係があるため、ASIHTTPRequest ヘッダーと .o ファイルに加えて、gcc は SystemConfiguration、CoreServices フレームワーク、および zlib ライブラリとリンクすることを期待します。

このライブラリで多くのテストを行っている場合は、「Objective-C」言語定義 ([設定] の下) を「Objective-C with ASIHTTPRequest」などとして複製することをお勧めします。次に、実行するすべての Objective-C コードに対して実行することなく、ASIHTTPRequest に対して実行するためのコンパイル フラグをカスタマイズできます。

Xcode がそのビルド ツリーなどをクリーンアップする場合に備えて、.o ファイルと "LinkFileList" ファイルをより永続的な場所にコピーすることもできます。

于 2012-01-25T22:30:28.737 に答える