8

ios3.x と ios4.x の両方で使用できる静的ライブラリを構築しようとしています。ios3.0 の別のプロジェクトで動作する ios3.0 で静的ライブラリを構築できますが、ios4 ではコンパイルされません。ios4からios3に移行しても同じです。

再作成する方法は次のとおりです。

  1. XCode 3.2.4 を開き、Library4 という名前の Cocoa Touch Static Library である新しいプロジェクトを開始します。
  2. クラス フォルダーをクリックし、「TestViewController」という名前の新しい UIViewController を作成します。
  3. Frameworks フォルダーを右クリックし、既存のフレームワークを追加し、UIKit を選択します。
  4. 左側のパネルでターゲットを展開し、マイ ライブラリ ターゲットを右クリックして [情報を取得] をクリックします。すべての構成を変更し、ベース sdk を iphone シミュレーター 4.0 に変更し、ios 展開ターゲットを ios3.0 に変更します。
  5. Link Library with Binaries フォルダをクリックします。右側のペインで、両方の役割を「弱い」に変更します
  6. ライブラリを構築する
  7. Xcode 3.2.2 を開き、Library4Test という新しい View ベースのアプリケーションを開始します。
  8. TestViewController.h をクラス フォルダーにコピーします。
  9. libLibrary4.a ファイルをフレームワーク フォルダーにコピーします。ターゲットのリンカー フェーズに自動的に追加されます。
  10. Library4Test ターゲットを右クリックし、[情報を取得] をクリックします。他のリンカー フラグに、「-ObjC」と「-all_load」を追加します。
  11. アプリのデリゲート ヘッダーに Import "TestViewController.h" を追加します。
  12. アプリ デリゲート ヘッダーのアプリケーションの didFinishLaunchingWithOptions メソッドに追加します。

    TestViewController *test = [TestViewController alloc] init;

  13. ios3.0シミュレータでコンパイル

コンパイルすると、次のようになります。

Ld build/Debug-iphonesimulator/library4Test.app/library4Test normal i386
cd /Users/test/Documents/Testing/library4Test
setenv MACOSX_DEPLOYMENT_TARGET 10.5
setenv PATH "/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/GrandpaIPhone/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk -L/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -L/Users/test/Documents/Testing/library4Test -F/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -filelist /Users/test/Documents/Testing/library4Test/build/library4Test.build/Debug-iphonesimulator/library4Test.build/Objects-normal/i386/library4Test.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -llibrary4_1 -o /Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator/library4Test.app/library4Test

Undefined symbols:
"_objc_msgSendSuper2", referenced from:
-TestViewController didReceiveMemoryWarning in liblibrary4_1.a(TestViewController.o)
-TestViewController viewDidUnload in liblibrary4_1.a(TestViewController.o)
-TestViewController dealloc in liblibrary4_1.a(TestViewController.o)
"__objc_empty_vtable", referenced from:
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
"_OBJC_CLASS_$_UIViewController", referenced from:
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
"_OBJC_METACLASS_$_UIViewController", referenced from:
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
".objc_class_name_TestViewController", referenced from:
literal-pointer@__OBJC@__cls_refs@TestViewController in library4_1os3TestAppDelegate.o
"_OBJC_METACLASS_$_NSObject", referenced from:
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
4

3 に答える 3

2

正確にはわかりませんが、リンクの問題のようです (これらすべての .o のもの)。iOS 静的ライブラリをセットアップする方法は次のとおりです。とても単純なことですが、うまくいきます。

  1. 新しいプロジェクトを開始し、iOS ライブラリ >> Cocoa Touch Static Library を選択します。
  2. いくつかのクラスを追加します。私のものは、NSLog で使用するためのより良い説明を提供する UIView のカテゴリです。
  3. ターゲットを選択し、各クラスの役割が適切な値に設定されていることを確認します。私のカテゴリの場合、「公開」にする必要があります。
  4. ターゲットをダブルクリックし、[ビルド] タブを選択します。
  5. 構成リリースを選択し、次のビルド設定を設定します。
  6. 展開場所 はい (チェック)
    展開後処理 はい (チェック)
    インストール ビルド製品の場所 /

静的ライブラリを構築します。デフォルトでは /usr/local/lib にビルドされます

新しいライブラリに簡単にアクセスできるように、シンボリック リンクを作成します。簡単な方法は、ターミナルを開いて次のコマンドを実行することです。

cd ~    
ln -s /usr/local/lib

ライブラリを使用する Xcode プロジェクトを開きます。Libraries などのグループを作成し、Ctrl キーを押しながらクリックして [既存のファイルを追加] を使用してライブラリを追加します。libYourLibrary.a のような名前になります。プロジェクトを実行すると、リンク エラーが発生します。プロジェクトファイルをダブルクリックして、[ビルド] >> [すべての構成] に移動し、[ライブラリ検索パス] 設定に次の値を追加します: ~/lib

于 2010-11-29T11:17:17.640 に答える
0

SDKで1つのターゲットを作成するだけですか? iOS-OSx 用の静的ライブラリを作成しましたが、手順ははるかに簡単でした。

  1. プロジェクトを作成します (iOS テンプレート「Cocoa touch Static Library」から)
  2. ソースファイルを追加
  3. SDK のターゲットを 1 つ追加する

もちろん、私はいくつかを追加する必要があります

#if TARGET_OS_IPHONE
...
#else
...
#endif

コードに。独自の条件を追加できます。

于 2010-11-29T12:36:58.023 に答える
0

適切なシステム フレームワークに対してリンクしていないため、コンパイラ エラーが発生しています。濃い赤のシンボルはすべて、Foundation.framework、UIKit.framework、および libobjc.dylib からのものです。

静的ライブラリは、リンクする必要がある必要なフレームワークを自動的に取得しないため、それらを使用するときは、自分でプロジェクトに追加する必要があります。

于 2011-06-14T20:08:26.827 に答える