我试图通过链接
进行示例代码运行下载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 file.MTscra.h有AudioToolBox和externalAccesory框架。
答案 0 :(得分: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路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”& “释放”然后重组DEBUG和RELEASE库搜索路径以使用这些相应的目录。
最后,将libMTSCRA_FAT.a重命名为libMTSCRA.a并将其放在调试搜索路径中,以保持iOS(armv7(cputype(12)cpusubtype(11)))的发布。我们这样做的原因是因为虽然在调试模式下使用这个新创建的.a文件可能没问题但是将它推入生产中却被认为是不好的,因为我们无法确认合并的lib是100%我们想要的(拱门的合并)。
Etvoilà!
答案 1 :(得分:3)
Undefined symbols for architecture i386:
这意味着您链接的库没有i386的符号。这意味着您无法使用模拟器。您需要在设备上运行示例或获取为模拟器创建的库的版本。
答案 2 :(得分:0)
您需要确保包含该库所需的所有框架。