【发布时间】:2012-01-29 20:15:41
【问题描述】:
我正在尝试为“iCarousel”objective-c 库创建一个 c# 绑定。 我为 Xcode 项目创建了一个新目标“Cocoa Touch 静态库”,之后我使用教程命令创建了静态库:
/Developer/usr/bin/xcodebuild -project iCarousel.xcodeproj -target libiCarousel -sdk iphonesimulator -configuration Release clean build
/Developer/usr/bin/xcodebuild -project iCarousel.xcodeproj -target libiCarousel -sdk iphoneos -arch armv6 -configuration Release clean build
/Developer/usr/bin/xcodebuild -project iCarousel.xcodeproj -target libiCarousel -sdk iphoneos -arch armv7 -configuration Release clean build
lipo -create -output libiCarousel.a libiCarousel-i386.a libiCarousel-armv6.a libiCarousel-armv7.a
现在一切都像魅力一样。 之后,我创建了一个新的 monotouch 绑定项目,包括“胖”静态库,使用新的 LinkWith 属性生成了一个 dll,它在模拟器和我的装有 iOS 5.0 的 iPad 上运行良好。
这个问题只出现在我安装了 iOS 4.1 的旧 iPhone 3g 上。我制作的示例没有运行,调试器返回这个奇怪的错误:
dyld:惰性符号绑定失败:未找到符号:_objc_retainAutoreleasedReturnValue 引用自:/var/mobile/Applications/8160D667-16EF-45F7-9658-A096AD421A21/Sample.app/Sample 预期在:/usr/lib/libobjc.A.dylib
dyld:未找到符号:_objc_retainAutoreleasedReturnValue 引用自:/var/mobile/Applications/8160D667-16EF-45F7-9658-A096AD421A21/Sample.app/Sample 预期在:/usr/lib/libobjc.A.dylib
我几乎可以肯定这是我的 Xcode 项目属性以及 ARMv6 和 ARMv7 设置的错误,但我不知道如何处理。
更新:我使用过这样的 LinkWith: [程序集:LinkWith ("libiCarousel.a", LinkTarget.Simulator | LinkTarget.ArmV6 | LinkTarget.ArmV7, ForceLoad = true, Frameworks="CoreGraphics QuartzCore UIKit")]
更新:我注意到我的构建只能在 iOS 5 上运行。
答案:
好吧,我成功了!
所以,我的想法是我必须修改项目设置中的“achitectures”值以支持 armv6,并在所有头文件中添加“-fno-objc-arc”编译标志。
我为此写了一个教程,一步一步来,希望它可以帮助所有的monotouch粉丝。
http://dantes-andreea.blogspot.com/2012/01/how-to-use-objective-c-library-in.html
【问题讨论】:
标签: objective-c binding xamarin.ios native