Файл символов экспорта: члены класса Objective C, 64-битные
У меня есть универсальная динамическая библиотека на основе Какао, которая также включает больше статических библиотек, из которых я хочу экспортировать функциональность. Кажется, я не могу сделать последнее без использования файла символов экспорта, и это нормально для меня... как-то. Я нигде не использую параметр "Символы, скрытые по умолчанию" (GCC_SYMBOLS_PRIVATE_EXTERN, -fvisibility=hidden). Проблема возникла, когда я пытался экспортировать базовый класс из динамической библиотеки, более конкретно при попытке использовать его члены в производных классах, не включенных в библиотеку, и даже более конкретно в 64-разрядной сборке: "Неопределенные символы: "_OBJC_IVAR_$_PluginBase.fConn" " Мне известны 64-битные изменения: http://developer.apple.com/library/mac/, раздел "64-битный класс и Контроль доступа к экземпляру "
И, конечно, все работает, если я добавляю _OBJC_IVAR _ $ _ PluginBase.fConn в файл экспорта... но только для 64-битной сборки, 32-битная не знает о таких вещах: "Неопределенные символы: "_OBJC_IVAR_$_PluginBase.fConn", на которую ссылается параметр командной строки: -exported_symbol[s_list]"
Единственное решение кажется другим обходным путем: иметь два файла экспорта. Но... Я не могу использовать "Добавить условие настройки сборки" для настройки EXPORTED_SYMBOLS_FILE:-S.
Любые идеи (кроме использования общедоступных методов доступа)?
1 ответ
Вы можете выполнить настройки компоновки с условной архитектурой, используя файлы xcconfig. Похоже, что это невозможно через графический интерфейс. Создайте файл конфигурации сборки, содержащий следующее:
EXPORTED_SYMBOLS_FILE[arch=i386]=$(SRCROOT)/SymbolsList32Bit
EXPORTED_SYMBOLS_FILE[arch=x86_64]=$(SRCROOT)/SymbolsList64Bit
а затем в настройках проекта, установите этот файл в качестве конфигурации сборки для проекта, и вы должны быть в порядке. (Очевидно, вам придется указывать пути к вашим файлам, но, надеюсь, вы поняли идею.)
Это сработало для меня. (FWIW вы также можете обусловить по имени SDK, например, MY_SETTING [sdk = iphoneos *] = FOO, MY_SETTING [sdk =mac] = BAR и т. Д.)
Надеюсь, это поможет!