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 为您提供了两个单独的 .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 工具将两者结合起来,然后创建单独的 DEBUG 和 RELEASE 库搜索路径,为 DEBUG 创建一个新的 libMTSCRA.a,它是 n-way FAT。

首先,您将转到 MagTek 保存两个不同版本的 libMTSCRA.a 的上述目录。当您在那里时,您将运行以下命令:

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 

然后在您的项目中,创建两个文件夹(也称为组)“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 回答