0

iOS で使用するライブラリがあり、iPhone シミュレーターとデバイスで動作します。ライブラリで file コマンドを実行すると、次のようになります。

libXXX.a (for architecture armv6):  current ar archive random library
libXXX.a (for architecture i386):   current ar archive random library

今、OSX アプリに同じライブラリを使用したいと考えています。アーキテクチャを 32 ビット i386 に設定しました。ただし、いくつかのコンパイル エラーが発生します。

Undefined symbols for architecture i386:
  ".objc_class_name_RTMPClient", referenced from:
      pointer-to-literal-objc-class-name in AppDelegate.o

ライブラリがもともとiOS用に開発されたためにエラーが発生したかどうかはわかりません(ヘッダーにはすべて削除する必要があったUIKit参照がありましたが、UI機能がなかったため無関係に見えました..それはRTMPサーバーを開く/接続するための単なるライブラリでした) -- またはリンク エラーですか? 一般に、iPhone 用に開発された i386 アーキテクチャ ライブラリを Mac アプリで使用できますか?

4

1 に答える 1

1

OK、あなたは用語に少し混乱しています。

IO:

アプリは、主に ARM アーキテクチャ上の iOS デバイス用の Foundation および UIKit フレームワークを使用して構築されます。i386 はシミュレーターであり、一連のプライベート Xcode フレームワークに対してビルドして、「適切に」実行できるようにします。静的ライブラリは両方に対してコンパイルし、「ユニバーサル バイナリ パッケージ」にバンドルして、両方のプラットフォームで実行できるようにする必要があります。

OS X:

アプリは i386 アーキテクチャ用の Cocoa と Appkit で構築されています。ただし、それらは同じ Xcode フレームワークに対してリンクされていないため、iOS デバイスでは実行できず、OS X 環境で実行する必要があります。

フレームワークを「完全にデバイスに依存しない」ようにするには、ハードウェアのフレーバーごとにライブラリをコンパイルし、それらをすべてバンドルする必要があります。

したがって、ライブラリの一部として RTMPClient ファイルを含めているが、間違ったアーキテクチャ用にコンパイルされているか、「ユニバーサル」ではないため、リンカー エラーです

于 2012-06-03T04:11:20.827 に答える