Xamarin.ios MT5202本机链接失败架构armv7的未定义符号:

Xamarin.ios MT5202本机链接失败架构armv7的未定义符号:,xamarin.ios,Xamarin.ios,我已经讨论这个问题好几天了,但一直没有取得任何进展。 我有一个原生的Obj-C库,我正试图使用MonoTouch绑定项目绑定它。绑定Dll已创建,但当我将其导入应用程序并尝试编译时,会出现MT5202本机链接失败错误 MT5202 Native linking failed error. 读取生成输出显示我正在编译的iOS版本的符号丢失 Undefined symbols for architecture armv7: 架构armv7的未定义符号: 构建输出显示了许多链接问题(仅显示了少数) “

我已经讨论这个问题好几天了,但一直没有取得任何进展。 我有一个原生的Obj-C库,我正试图使用MonoTouch绑定项目绑定它。绑定Dll已创建,但当我将其导入应用程序并尝试编译时,会出现MT5202本机链接失败错误

MT5202 Native linking failed error. 读取生成输出显示我正在编译的iOS版本的符号丢失

Undefined symbols for architecture armv7: 架构armv7的未定义符号: 构建输出显示了许多链接问题(仅显示了少数)

“CVPixelBufferGetPixelFormatType”,引用自: -libQuickMarkSDK.a(DecodePickerController.o)中的[DecodePickerController捕获输出:didOutputSampleBuffer:fromConnection:] -libQuickMarkSDK.a(QMImageUtil.o)中的[QMImageUtil saveToAlbum:] “CVPixelBufferGetPlaneCount”,引用自: +libQuickMarkSDK.a(QMImageUtil.o)中的[QMImageUtil imageBufferSave:f:] +libQuickMarkSDK.a(QMImageUtil.o)中的[QMImageUtil-imageBuffer:zoom:w:h:f:] “CVPixelBufferGetWidth”,引用自: -libQuickMarkSDK.a(DecodePickerController.o)中的[DecodePickerController捕获输出:didOutputSampleBuffer:fromConnection:] -libQuickMarkSDK.a(QMImageUtil.o)中的[QMImageUtil saveToAlbum:] “\u CVPixelBufferGetWidthOfPlane”,引用自: +libQuickMarkSDK.a(QMImageUtil.o)中的[QMImageUtil imageBufferSave:f:] “CVPixelBufferLockBaseAddress”,引用自: -libQuickMarkSDK.a(DecodePickerController.o)中的[DecodePickerController捕获输出:didOutputSampleBuffer:fromConnection:] “_OBJC_CLASS_$_AVCaptureDevice”,引用自: libQuickMarkSDK.a(QuickMarkCameraUtil.o)中的objc类引用 “_OBJC_CLASS_$_AVCaptureDeviceInput”,引用自: libQuickMarkSDK.a(QuickMarkCameraUtil.o)中的objc类引用 首先,我认为这只是绑定的一个错误。所以我重建了绑定。没有快乐。所以为了验证一个理论,我尝试使用github提供的RedLaser mono绑定。这也提供了相同的错误。(如果从makefile中删除-unsafe)

我需要绑定的库的linkwith语句是

assembly: LinkWith ("libQuickMarkSDK.a", LinkTarget.ArmV7, ForceLoad = true, Frameworks = "AVFoundation CFNetwork CoreMedia CoreVideo libz.1.2.5.dylib MobileCoreServices QuartzCore Foundation SystemConfiguration")] 程序集:LinkWith(LIbQuaskMdSDk.a),Link Kalgest.ARMV7,FraceloAD= true,框架=“基础CFNETCORMEDA CORVEDIO LIbZ.1.2.5DyLB MyTraceCurrvices QualthCype基金会系统配置”) 使用的Monotouch附加标志是-cxx

-cxx
我已经阅读了很多其他问题,但没有任何东西能够帮助解决这个问题,任何帮助都会很好。

您没有说明任何版本号(iOS、Xcode、MonoTouch…),因此很难给出具体/明确的答案

当您将项目更新到iOS6/Xcode 4.5时,可能会出现这种情况,其中删除了对ARMv6的支持。如果您的本机库只包含ARMv6,那么它们(本机库,而不是绑定项目)将需要为ARMv7重新编译(因为现在这是一项要求)

要检查此问题,请尝试执行(包括本机库的完整路径):


这将告诉您本机库支持的体系结构。这些需要与您在绑定项目中提供的
LinkTarget
相匹配(否则您将从本机链接器中获得错误)。

您是否尝试了poupou在其最后评论中的建议?我在为iPhone编译时遇到了相同的错误,但在模拟器中没有。我发现LinkWith部分缺少了很多框架。为了找出缺少哪些框架,我在谷歌上搜索(例如)
cvpixelbuffergetwidthofplaneframework


这个答案归功于cheeesus:

要在模拟器中运行,您需要
LinkTarget.ArmV7 | LinkTarget.simulator
,您是在模拟器中还是在设备上尝试这一点?您好,感谢您的响应,但是模拟器不是一个可行的目标,因为在本机库中使用了摄像头。如果错误是i386的未定义符号,那么我可以理解这个问题。您好,谢谢您的回复。我已经升级到mono touch和xCode的最新版本。我知道这可能是一个问题。但是,还有另一个应用程序使用第三方库,其包装器尚未重新编译,并且不会引发任何问题。但是,我将再次检查库是否支持您建议的体系结构。再次感谢您,我会让您知道我的进展。lipo-info的输出显示了两种架构类型armv7(cputype(12)cpusubtype(11)),我相信第二种是针对armv7s的,据我所知,应该可以很好地编译。我能想到的唯一一件事是,还有另一个我不知道的库需要链接。@AshWilliams(对于设备而言)这应该可以避免这个消息。尝试删除
libz.1.2.5.dylib
(它不是一个框架,而是一个库-错误的位置),并添加
AVFoundation
,这是与AV*相关的代码所在的名称。除了这些猜测之外,我们还需要一个完整的测试用例(bugzilla)来找出问题所在。 -cxx
file libQuickMarkSDK.a