2013-05-27 34 views
0

我试图从我的Xamarin应用程序调用Card.IO。当我尝试编译我的应用程序并在消息中引用“std :: terminate()”时,我得到“架构i386的未定义符号:”。该应用程序专门用于iPhone,我不知道“i386”来自何处 - 我可以找到的项目选项中的所有设置都设置为ARMv7,绑定中的LinkWith属性也是如此。Card.io绑定项目失败应用编译

Card.IO指南状态,我需要在Xcode中添加-lstdc++“其他连接标志”,但我不知道我应该把这个在Xamarin Studio的选项

的问题是:如何让我这个绑定工作?绑定中是否有错误?是否有一些项目设置或以某种方式在我的应用程序中添加更多框架引用?

我以前Objective Sharpie生成以下

using System; 
using System.Drawing; 
using MonoTouch.ObjCRuntime; 
using MonoTouch.Foundation; 
using MonoTouch.UIKit; 

namespace CardIO 
{  
    [BaseType (typeof (NSObject))] 
    public partial interface CardIOCreditCardInfo { 

     [Export ("cardNumber")] 
     string CardNumber { get; set; } 

     [Export ("redactedCardNumber")] 
     string RedactedCardNumber { get; } 

     [Export ("expiryMonth")] 
     uint ExpiryMonth { get; set; } 

     [Export ("expiryYear")] 
     uint ExpiryYear { get; set; } 

     [Export ("cvv")] 
     string Cvv { get; set; } 

     [Export ("zip")] 
     string Zip { get; set; } 

     [Export ("scanned")] 
     bool Scanned { get; set; } 

     [Export ("cardType")] 
     CardIOCreditCardType CardType { get; } 

     [Static, Export ("displayStringForCardType:usingLanguageOrLocale:")] 
     string DisplayStringForCardType (CardIOCreditCardType cardType, string languageOrLocale); 

     [Static, Export ("logoForCardType:")] 
     NSObject LogoForCardType (CardIOCreditCardType cardType); 
    } 

    [Model] 
    [BaseType (typeof (NSObject))] 
    public partial interface CardIOPaymentViewControllerDelegate { 

     [Export ("userDidCancelPaymentViewController:")] 
     void UserDidCancelPaymentViewController (CardIOPaymentViewController paymentViewController); 

     [Export ("userDidProvideCreditCardInfo:inPaymentViewController:")] 
     void UserDidProvideCreditCardInfo (CardIOCreditCardInfo info, CardIOPaymentViewController paymentViewController); 
    } 

    [BaseType (typeof (UINavigationController))] 
    public partial interface CardIOPaymentViewController { 

     [Export ("initWithPaymentDelegate:")] 
     IntPtr Constructor (CardIOPaymentViewControllerDelegate aDelegate); 

     [Export ("initWithPaymentDelegate:scanningEnabled:")] 
     IntPtr Constructor (CardIOPaymentViewControllerDelegate aDelegate, bool scanningEnabled); 

     [Export ("appToken")] 
     string AppToken { get; set; } 

     [Export ("languageOrLocale")] 
     string LanguageOrLocale { get; set; } 

     [Export ("keepStatusBarStyle")] 
     bool KeepStatusBarStyle { get; set; } 

     [Export ("navigationBarStyle")] 
     UIBarStyle NavigationBarStyle { get; set; } 

     [Export ("navigationBarTintColor")] 
     UIColor NavigationBarTintColor { get; set; } 

     [Export ("disableBlurWhenBackgrounding")] 
     bool DisableBlurWhenBackgrounding { get; set; } 

     [Export ("collectExpiry")] 
     bool CollectExpiry { get; set; } 

     [Export ("collectCVV")] 
     bool CollectCvv { get; set; } 

     [Export ("collectZip")] 
     bool CollectZip { get; set; } 

     [Export ("showsFirstUseAlert")] 
     bool ShowsFirstUseAlert { get; set; } 

     [Export ("useCardIOLogo")] 
     bool UseCardIolOgo { get; set; } 

     [Export ("disableManualEntryButtons")] 
     bool DisableManualEntryButtons { get; set; } 

     [Export ("paymentDelegate")] 
     CardIOPaymentViewControllerDelegate PaymentDelegate { get; set; } 

     [Export ("canReadCardWithCamera")] 
     bool CanReadCardWithCamera { get; } 

     [Export ("libraryVersion")] 
     string LibraryVersion { get; } 
    } 
} 

我还添加了在Card.IO的网站上列出的框架到.linkswith文件的代码:

[assembly: LinkWith ("libCardIO.a", LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Simulator, ForceLoad = true 
, Frameworks="AVFoundation AudioToolbox CoreMedia CoreVideo MobileCoreServices OpenGLES QuartzCore Security UIKit")] 

然后我说在一个项目中引用我的应用程序到新创建的绑定项目,但它不编译。我得到这个错误在Xamarin的输出控制台:

Process exited with code 1, command: 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -Wl,-no_pie -arch i386 -gdwarf-2 -fobjc-legacy-dispatch -fobjc-abi-version=2 -miphoneos-version-min=6.1 -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk /Users/Sten/Dropbox/Code/Projects/Tabit/TabitOne_iPhone/TabitOne/obj/iPhoneSimulator/Debug/mtouch-cache/main.i386.cache.OHBLJlHbpZ74bpnhszg9JrCN8A8=.o -o /var/folders/bb/2tbfzn4n2dq6rsmtpv_jlmbr0000gq/T/tmp59582304.tmp/TabitOne -framework CFNetwork -framework AssetsLibrary -framework Accounts -framework CoreBluetooth -framework CoreTelephony -framework EventKit -framework EventKitUI -framework Foundation -framework CoreMotion -framework GameKit -framework GLKit -framework iAd -framework MapKit -framework MediaPlayer -framework MessageUI -framework NewsstandKit -framework OpenGLES -framework Social -framework StoreKit -framework Twitter -framework UIKit -framework PassKit -framework AddressBookUI -framework AudioToolbox -framework SystemConfiguration -framework AddressBook -framework AVFoundation -framework QuartzCore -framework CoreData -framework CoreGraphics -framework CoreImage -framework CoreLocation -framework CoreText -framework ImageIO -framework MobileCoreServices -framework Security -framework CoreMedia -framework CoreMIDI -framework CoreVideo -framework ExternalAccessory -framework AdSupport -framework QuickLook -lz -liconv -u _mono_pmip -u _monotouch_create_managed_ref -u _monotouch_release_managed_ref -u _monotouch_IntPtr_objc_msgSend_IntPtr -u _monotouch_IntPtr_objc_msgSendSuper_IntPtr -u _CloseZStream -u _CreateZStream -u _Flush -u _ReadZStream -u _WriteZStream -lmono-2.0 -lmonotouch-debug -L/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator.sdk/usr/lib -u _catch_exception_raise -force_load /var/folders/bb/2tbfzn4n2dq6rsmtpv_jlmbr0000gq/T/tmp59582304.tmp/libCardIO.a 
**Undefined symbols for architecture i386:** 
    "**std::terminate()**", referenced from: 
     -[CardIOGPURenderer dealloc] in libCardIO.a(CardIOGPURenderer.o) 
    "___gxx_personality_v0", referenced from: 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOAnalytics.o) 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOGPURenderer.o) 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOAnimation.o) 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOAnalytics.o) 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOGPURenderer.o) 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOAnimation.o) 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOAnalytics.o) 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOGPURenderer.o) 
     Dwarf Exception Unwind Info (__eh_frame) in libCardIO.a(CardIOAnimation.o) 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status 

error MT5202: Native linking failed. Please review the build log. 
+1

仅供参考,i386代码捆绑支持iOS模拟器。 (没有相机支持,只是一个后备手动输入模式) – tomwhipple

+0

@tomwhipple谢谢你的信息! –

回答

2

好,这要归功于另一个SO post的答案,我得到这个编辑我的应用程序的项目选项工作,页面“的iOS打造”场“附加型mTouch参数”里我把价值:

-cxx -gcc_flags "-lstdc++"