我正在尝试为“iCarousel”objective-c库创建一个c#绑定。 我为Xcode项目创建了一个新目标“Cocoa Touch Static Library”,之后我使用教程命令创建了静态库:
/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,以及它在模拟器和我的iPad上使用iOS 5.0正常工作。
问题只出现在安装了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: [assembly: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
答案 0 :(得分:2)
好的伙计们,我已经成功了! 因此,我必须修改项目设置中的“achitectures”值以支持armv6,并在所有头文件中添加“-fno-objc-arc”编译标志。 我一步一步地为此编写了一个教程,希望它能帮助所有的monotouch粉丝 http://dantes-andreea.blogspot.com/2012/01/how-to-use-objective-c-library-in.html
答案 1 :(得分:0)
假设我应该回答这个问题,尽管这可能是错误的。好吧,这看起来是iOS SDK版本之间的不兼容。一方面,您的库看起来像是为iOS 5构建的,这意味着它可能正在获得完整的ARC处理等等。我不知道的是,在使用ARC时,iOS 4和5之间的编译结果是否不同,所以请稍等一下。
无论如何,如果您使用ARC支持但是将iOS 5.0作为最低SDK,那么它可能已经与iOS 4.1不兼容,通过应用一些技巧或其他在iOS 5上完全正常工作但不支持iOS 4(再一次,我对这个如何解决一无所知,所以你现在应该在盐中沐浴)。很难说,因为我从来没有遇到过这个,但这似乎是一个不错的猜测。您可能想尝试重建库并定位早期版本的SDK。