2012-06-19 10 views
6

Possiedo un progetto MonoTouch che crea e gira bene su i386/iOS Simulator. Il progetto fa riferimento a un nativo (Obj-C) biblioteca, che mi sono convertito a una DLL MonoTouch utilizzando il processo BTouch come descritto in BindingSample di Xamarin:Build MonoTouch: ld: simbolo/i non trovato per l'architettura armv7

https://github.com/xamarin/monotouch-samples/tree/eb640165f0485ff59b2f80e73ccff382bf4f2083/BindingSample/src/binding

Quindi il mio makefile costruisce tutte e tre le architetture (i386, ARMv6 e armv7), quindi unisce le tre uscite a una libreria 'Universale' e infine utilizza btouch per generare una DLL MonoTouch.

Per essere sicuro che la mia libreria universale contenga tutte e tre le architetture, ho controllato con lipo -info, e infatti contiene i386, armv6 e armv7.

Tuttavia, quando sto costruendo per la distribuzione su un dispositivo iOS, ottengo i seguenti errori:

Undefined symbols for architecture armv7: 
    "_ABAddressBookCreate", referenced from: 
     -[ContactsTokenField setupSms] in libContactsTokenFieldViewUniversal.a(ContactsTokenField.o) 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_ABAddressBookCopyArrayOfAllPeople", referenced from: 
     -[ContactsTokenField setupSms] in libContactsTokenFieldViewUniversal.a(ContactsTokenField.o) 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_ABAddressBookGetPersonCount", referenced from: 
     -[ContactsTokenField setupSms] in libContactsTokenFieldViewUniversal.a(ContactsTokenField.o) 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_ABRecordCopyValue", referenced from: 
     -[ContactsTokenField setupSms] in libContactsTokenFieldViewUniversal.a(ContactsTokenField.o) 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_kABPersonFirstNameProperty", referenced from: 
     -[ContactsTokenField setupSms] in libContactsTokenFieldViewUniversal.a(ContactsTokenField.o) 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
     -[ContactsTokenField setupSms] in libContactsTokenFieldViewUniversal.a(ContactsTokenField.o) 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_kABPersonLastNameProperty", referenced from: 
     -[ContactsTokenField setupSms] in libContactsTokenFieldViewUniversal.a(ContactsTokenField.o) 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
     -[ContactsTokenField setupSms] in libContactsTokenFieldViewUniversal.a(ContactsTokenField.o) 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_ABMultiValueGetCount", referenced from: 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_ABMultiValueCopyLabelAtIndex", referenced from: 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_ABMultiValueCopyValueAtIndex", referenced from: 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_kABPersonEmailProperty", referenced from: 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
    "_kABPersonPhoneProperty", referenced from: 
     -[TITokenFieldView setupWithAddressType:prompt:] in libContactsTokenFieldViewUniversal.a(TITokenField.o) 
ld: symbol(s) not found for architecture armv7 
collect2: ld returned 1 exit status 

mtouch exited with code 1 

Che cosa sto facendo di sbagliato?

risposta

8

trovato il problema: la libreria nativa dipendeva dal quadro AddressBook, e ho dimenticato di includere nelle AssemblyInfo.cs del progetto definizione API:

[assembly: LinkWith ("libContactsTokenFieldViewUniversal.a", LinkTarget.Simulator | LinkTarget.ArmV6 | LinkTarget.ArmV7, ForceLoad = true, Frameworks="AddressBook Foundation")] 
+0

Wow, ho quasi rinunciato. Grazie! –

+0

Questo bit di informazione mi ha messo sulla strada giusta dopo una lunga e dolorosa ricerca. Grazie. – Aranda

Problemi correlati