3

サンプルコードをリンクでダウンロードして実行しようとしていました

http://www.magtek.com/support/software/downloads/sw/99510108.zip

これはカード リーダー API です。サンプル コードは次のとおりです。このコードを実行すると、次のエラーが表示されます。

ld: warning: ignoring file /Users/gaurav.garg/Downloads/99510108/SampleCode/Lib/libMTSCRA.a, missing required architecture i386 in file
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_MTSCRA", referenced from:
      objc-class-ref in MagTekDemoAppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

クラスMTSCRAは単なるヘッダーファイルであり、私がチェックした解決策は、ターゲットのビルドビルドフェーズのコンパイル済みソースパスに.mファイルを追加する必要があることです...しかし、残念ながらMTSCRA.mファイルはありません.MTscra.h には AudioToolBox と externalAccesory フレームワークがあります。

4

3 に答える 3

8

実際の問題は、MagTek が 2 つの別個の .a ファイルを提供することです。

Release-iphoneos のものを見て、次のコマンドを実行すると:

> lipo -info libMTSCRA.a 
Architectures in the fat file: libMTSCRA.a are: armv7 (cputype (12) cpusubtype (11))

同様に、Release-iphonesimulator のものを見ると...

> lipo -info libMTSCRA.a 
input file libMTSCRA.a is not a fat file
Non-fat file: libMTSCRA.a is architecture: i386

したがって、本当の答えは、lib ツールを使用して 2 つを結合し、DEBUG と RELEASE のライブラリ検索パスを個別に作成して、n-way FAT である DEBUG 用の新しい libMTSCRA.a を作成することです。

開始するには、MagTek が libMTSCRA.a の 2 つの異なるバージョンを保持している上記のディレクトリに移動します。そこで、次のコマンドを実行します。

libtool -static -o libMTSCRA_FAT.a Release-iphoneos/libMTSCRA.a Release-iphonesimulator/libMTSCRA.a 

出力ファイルを調べると、次のように表示されます。

>lipo -info libMTSCRA_FAT.a 
Architectures in the fat file: libMTSCRA.a are: armv7 (cputype (12) cpusubtype (11)) i386 

次に、プロジェクトで 2 つのフォルダー (別名グループ) "debug" と "release" を作成し、DEBUG と RELEASE ライブラリ検索パスを再構築して、これらのそれぞれのディレクトリを使用します。

最後に、libMTSCRA_FAT.a の名前を libMTSCRA.a に変更し、iOS (armv7 (cputype (12) cpusubtype (11))) をリリースしたままデバッグ検索パスに配置します。これを行う理由は、この新しく作成された .a ファイルをデバッグ モードで使用することは問題ないかもしれませんが、マージされたライブラリが 100% 意図したものであることを確認する方法がないため、これを本番環境にプッシュするのは悪趣味と見なされるためです。 (アーチのマージ)。

ほら!

于 2013-11-07T02:11:41.007 に答える
3
Undefined symbols for architecture i386:

これは、リンクしようとしているライブラリに i386 のシンボルがないことを意味します。つまり、シミュレーターを使用できません。デバイスでサンプルを実行するか、シミュレーター用に作成されたライブラリのバージョンを取得する必要があります。

于 2012-06-08T16:38:00.883 に答える
0

そのライブラリに必要なすべてのフレームワークが含まれていることを確認する必要があります。

于 2012-06-07T21:18:41.497 に答える