2012-06-19 5 views
6

Ich habe ein MonoTouch-Projekt, das auf dem i386/iOS Simulator funktioniert. Das Projekt verweist auf eine native (Obj-C) Bibliothek, die ich unter Verwendung des btouch Prozess zu einem Monotouch DLL umgewandelt, wie es in Xamarin der BindingSample beschrieben:MonoTouch Build: ld: Symbol (e) nicht gefunden für Architektur armv7

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

Also mein Make-Datei alle drei Architekturen baut (i386, ARMv6 und armv7), kombiniert dann die drei Ausgänge zu einer "Universal" -Bibliothek und verwendet schließlich btouch, um eine MonoTouch-DLL zu erzeugen.

Um sicher zu sein, dass meine universelle Bibliothek alle drei Architekturen enthält, habe ich mit lipo -info überprüft, und zwar enthält es i386, armv6 und armv7.

jedoch, wenn ich für den Einsatz auf einem tatsächlichen iOS-Gerät bauen, ich die folgenden Fehler erhalten:

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 

Was mache ich falsch?

Antwort

8

das Problem gefunden: die native Bibliothek auf dem Addressbook Rahmen abhing, und ich vergaß es in der AssemblyInfo.cs des API-Definition-Projektes gehöre:

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

Wow, ich fast aufgegeben. Vielen Dank! –

+0

Diese Information hat mich nach einer langen und schmerzhaften Suche auf den richtigen Weg gebracht. Vielen Dank. – Aranda