在MonoTouch中链接PhoneGap静态库时未定义的符号

问题描述:

我正在为MonoTouch中的UIWebView提供PhoneGap功能。我已经测试了Objective C中的功能,并且静态库在那里正常工作。但是,当我尝试将PhoneGap静态库链接到我的MonoTouch应用程序时,我得到一长串未定义的符号。在MonoTouch中链接PhoneGap静态库时未定义的符号

我已经包含了PhoneGap库的所有头文件,并且我还确保在编译PhoneGap库时未勾选'编译为缩略图'。所以我不确定我错过了什么,错误信息对我没有多大意义。我会在这里引用他们(这是一个很长的名单!),但希望这里有人能够启发我链接器试图告诉我什么!

下面是一长串...

Undefined symbols: 
"_ABPersonSetImageData", referenced from: 
    -[Contact setFromContactDict:asUpdate:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_kABPersonAddressStateKey", referenced from: 
    _kABPersonAddressStateKey$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonAddressStateKey$non_lazy_ptr) 
"_kABPersonPhoneHomeFAXLabel", referenced from: 
    _kABPersonPhoneHomeFAXLabel$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonPhoneHomeFAXLabel$non_lazy_ptr) 
"_kABPersonEmailProperty", referenced from: 
    _kABPersonEmailProperty$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonEmailProperty$non_lazy_ptr) 
"_kABPersonNoteProperty", referenced from: 
    _kABPersonNoteProperty$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonNoteProperty$non_lazy_ptr) 
"_kABWorkLabel", referenced from: 
    _kABWorkLabel$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABWorkLabel$non_lazy_ptr) 
"_kCLLocationAccuracyThreeKilometers", referenced from: 
    _kCLLocationAccuracyThreeKilometers$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kCLLocationAccuracyThreeKilometers$non_lazy_ptr) 
"_OBJC_CLASS_$_CLLocationManager", referenced from: 
    objc-class-ref-to-CLLocationManager in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_kABPersonInstantMessageServiceICQ", referenced from: 
    _kABPersonInstantMessageServiceICQ$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonInstantMessageServiceICQ$non_lazy_ptr) 
"_kABPersonInstantMessageServiceMSN", referenced from: 
    _kABPersonInstantMessageServiceMSN$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonInstantMessageServiceMSN$non_lazy_ptr) 
"_kABPersonInstantMessageServiceKey", referenced from: 
    _kABPersonInstantMessageServiceKey$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonInstantMessageServiceKey$non_lazy_ptr) 
"_kCLLocationAccuracyNearestTenMeters", referenced from: 
    _kCLLocationAccuracyNearestTenMeters$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kCLLocationAccuracyNearestTenMeters$non_lazy_ptr) 
"_kCLLocationAccuracyKilometer", referenced from: 
    _kCLLocationAccuracyKilometer$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kCLLocationAccuracyKilometer$non_lazy_ptr) 
"_UTTypeCopyPreferredTagWithClass", referenced from: 
    -[File getMimeTypeFromPath:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_ABPersonCreate", referenced from: 
    -[Contact init] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_UTTypeCreatePreferredIdentifierForTag", referenced from: 
    -[File getMimeTypeFromPath:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_kABPersonPhoneProperty", referenced from: 
    _kABPersonPhoneProperty$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonPhoneProperty$non_lazy_ptr) 
"_kABPersonInstantMessageUsernameKey", referenced from: 
    _kABPersonInstantMessageUsernameKey$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonInstantMessageUsernameKey$non_lazy_ptr) 
"_kABOtherLabel", referenced from: 
    _kABOtherLabel$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABOtherLabel$non_lazy_ptr) 
"_kABPersonBirthdayProperty", referenced from: 
    _kABPersonBirthdayProperty$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonBirthdayProperty$non_lazy_ptr) 
"_MPMoviePlayerPlaybackDidFinishNotification", referenced from: 
    _MPMoviePlayerPlaybackDidFinishNotification$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _MPMoviePlayerPlaybackDidFinishNotification$non_lazy_ptr) 
"_ABMultiValueRemoveValueAndLabelAtIndex", referenced from: 
    -[Contact setMultiValueStrings:forProperty:inRecord:asUpdate:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contact setMultiValueDictionary:forProperty:inRecord:asUpdate:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_ABRecordRemoveValue", referenced from: 
    -[Contact removeProperty:inRecord:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_ABAddressBookCreate", referenced from: 
    -[Contacts newContact:withDict:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contacts displayContact:withDict:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contacts search:withDict:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contacts save:withDict:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contacts remove:withDict:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_ABMultiValueCopyValueAtIndex", referenced from: 
    -[Contact setMultiValueStrings:forProperty:inRecord:asUpdate:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contact setMultiValueDictionary:forProperty:inRecord:asUpdate:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contact extractMultiValue:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contact extractAddresses] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contact extractIms] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_OBJC_CLASS_$_AVAudioPlayer", referenced from: 
    objc-class-ref-to-AVAudioPlayer in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_kABHomeLabel", referenced from: 
    _kABHomeLabel$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABHomeLabel$non_lazy_ptr) 
"_kABPersonInstantMessageProperty", referenced from: 
    _kABPersonInstantMessageProperty$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonInstantMessageProperty$non_lazy_ptr) 
"_kABPersonAddressZIPKey", referenced from: 
    _kABPersonAddressZIPKey$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonAddressZIPKey$non_lazy_ptr) 
"_ABPersonRemoveImageData", referenced from: 
    -[Contact setFromContactDict:asUpdate:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
    -[Contact setFromContactDict:asUpdate:] in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_kABPersonAddressProperty", referenced from: 
    _kABPersonAddressProperty$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonAddressProperty$non_lazy_ptr) 
"_OBJC_CLASS_$_MPMoviePlayerController", referenced from: 
    objc-class-ref-to-MPMoviePlayerController in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
"_kABPersonInstantMessageServiceYahoo", referenced from: 
    _kABPersonInstantMessageServiceYahoo$non_lazy_ptr in libPhoneGap.a(libPhoneGapLib.a-armv6-master.o) 
(maybe you meant: _kABPersonInstantMessageServiceYahoo$non_lazy_ptr) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
Process exited with code 1 

希望这是有道理的人在这里,因为它是希腊给我! ;)

感谢

我发现这个问题;我错过了PhoneGap库所需的几个框架条目。具体而言,需要将这些框架条目添加到gcc_flags中:

-framework corelocation 
-framework mediaplayer 
-framework messageui 
-framework mobilecoreservices 
-framework quartzcore 
-framework systemconfiguration 
-framework audiotoolbox 
-framework avfoundation 
-framework addressbook 
-framework foundation 
-framework coregraphics 
-framework addressbookui