* .ANE для расширения приложения iPhone я получаю ld: абсолютная ОШИБКА адресации, когда добавляю его в мой основной проект Flex и компилирую его

Я кодирую расширение (ANE) для iPhone, которое читает список контактов. Я получаю сообщение об ошибке, когда добавляю файл .ane в свой проект Flash Builder и компилирую его. Я без проблем скомпилировал код Objective-c в *.a lib. Я скомпилировал .ane без ошибок.

Это ошибка, когда я добавляю .ane в основной проект Flex:

Error occurred while packaging the application:

ld: absolute addressing (perhaps -mdynamic-no-pic) used in _getContatti from
/var/folders/j9/j9OzOTqhGJGpr2m87bnYEU+++TQ/-Tmp-/888e0e80-9ef5-4d2a-9e34-
c01545b25bfc/mylib.library.com.a(ExtensionMyLibIOSNative.o) 
not allowed in slidable image. Use '-read_only_relocs suppress' to enable text 
relocs
Compilation failed while executing : ld64

В Xcode я уже установил «Включить связывание с общими библиотеками» на «НЕТ» в настройках сборки. Это код Objective-c, который вызывает ошибку:

FREObject getContatti(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {

FREObject nome_visualizzato;
FREObject nome_visualizzatoPrimario;
FREObject nome_visualizzatoAlternativo;

ABAddressBookRef addressBook = ABAddressBookCreate( );
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
CFIndex nPeople = ABAddressBookGetPersonCount( addressBook );

FREObject arrayContatti;
FRENewObject((const uint8_t*)"Vector.<extension.MyLibrary.entity.Contatto>", 0, NULL, &arrayContatti, NULL);
FRESetArrayLength(arrayContatti, nPeople);


for ( int i = 0; i < nPeople; i++ )
{
    ABRecordRef ref = CFArrayGetValueAtIndex( allPeople, i );
    CFStringRef first = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
    CFStringRef last = ABRecordCopyValue(ref, kABPersonLastNameProperty);
    CFStringRef company = ABRecordCopyValue(ref, kABPersonOrganizationProperty);
    -- DO SOMETHING --
}
    return result;
}

Это работает, если я прокомментирую\удалю строки:

CFStringRef first = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
CFStringRef last = ABRecordCopyValue(ref, kABPersonLastNameProperty);
CFStringRef company = ABRecordCopyValue(ref, kABPersonOrganizationProperty);

person Ciro Vigorito    schedule 16.05.2012    source источник


Ответы (1)


  1. Проверьте, включен ли фреймворк AddressBook (и, возможно, AddressBookUI, если вы используете какие-либо представления из AddressBook) в ваш проект в разделе «связать двоичный файл с библиотеками» (вы можете найти его здесь: http://wordpress.rcntech.com/wp-content/uploads/2011/05/Xcode4_Adding_Existing_Framework3.png) Попробуйте установить «включить связывание с общими библиотеками» на «да» (если установлено «нет»). Добавьте необходимые фреймворки в параметры платформы при компиляции ане (если они еще не включены в эфир)

В качестве альтернативы, поскольку вы пытаетесь получить доступ к AddressBook, вы можете проверить это расширение: https://github.com/memeller/ContactEditor

person memeller    schedule 23.05.2012