0

プロジェクトの 1 つで静的ライブラリを使用すると、このエラーが発生します。プロジェクトは iOS デバイスでうまく動作します。しかし、シミュレーターではありません。スタティック ライブラリは私のものではないため、i386 用に再コンパイルできません。ただし、これは iPhone 用のハードウェア ドライバーです。そのため、シミュレーターで実行する場合、このライブラリは本当に必要ありません。アクセサリがデバイスに存在する場合、アプリのフローは異なります。

したがって、このファイルへの参照を保持する必要があります。ただし、iOS デバイスでのみ必要です。UI やその他のテスト目的でアプリを実行するためにシミュレーターで実行する場合は必要ありません。

このエラーを回避するにはどうすればよいですか? シミュレーターでの実行時にオブジェクト ファイル/ライブラリを回避するために、ターゲットまたはスキームを構成する方法はありますか?

ld: warning: ignoring file 
/Framework/iSmartSDK/libiSmartSDK_Lib.a, missing required architecture i386 in file  
/Framework/iSmartSDK/libiSmartSDK_Lib.a (2 slices)
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_iSmart", referenced from:
      objc-class-ref in SmartCardReaderVC.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
4

2 に答える 2

1

エミュレーターにライブラリーは必要ないと言っても、リンカーは別のことを言います。クラスを探していiSmartます。

前進するための最良の方法は、おそらくクラスのスタブを作成することですiSmart

  • 静的ライブラリプロジェクトを作成します。

  • 非常に最小限のクラスiSmart、たとえばクラスと2つのメソッドを追加します。各メソッドは何もしないか、0を返します。

  • エミュレータ(i386)用のライブラリをビルドします。

  • このツールを使用してlipo、サードパーティのライブラリとスタブライブラリのi386部分を単一のライブラリにマージします(デバイス用の大部分とエミュレータ用のごくわずかな部分になります)。

  • オリジナルのライブラリではなく、カスタムビルドのライブラリにアプリをリンクします。

于 2012-12-28T10:23:48.607 に答える
1

それを使用すると、シンボルが参照され、lib が必要になります。機能が本当に必要ない場合は、その使用法を定義でラップしてください。「それを定義する」:

#if TARGET_OS_IPHONE
   iSmart *smart = ....
#else
   NSLog(@"no ismart on mac");
#endif

注: シンボルを割り当てたり呼び出したりしないだけでは十分ではありません。変数を宣言するためにシンボルを使用しないでください**


1つのファイルAFAICSにのみ含まれている可能性があります..ファイル全体を#ifdefし、SmartReaderVCスタブを作成する可能性があります

于 2012-12-28T10:18:00.317 に答える