4

У меня есть универсальная динамическая библиотека на основе какао, которая также включает в себя больше статических библиотек, из которых я хочу экспортировать функциональность. Кажется, я не могу сделать последнее, не используя файл экспортных символов, и это хорошо для меня ... как-то. Я нигде не использую параметр «Символы, скрытые по умолчанию» (GCC_SYMBOLS_PRIVATE_EXTERN, -fvisibility = hidden). Проблема возникла, когда я пытался экспортировать базовый класс из динамической библиотеки, в частности, при попытке использовать его члены в производных классах, не включенных в библиотеку, и даже более конкретно в 64-битную сборку: « Неопределенные символы : "_OBJC_IVAR _ $ _ PluginBase.fConn" " Я отдаю себе отчет в 64-битных изменений: http://developer.apple.com/library/mac/#releasenotes/Cocoa/RN-ObjectiveC/_index.html, раздел "64-бит класса и Instance Control Variable Access"Файл экспортных символов: Объекты класса Objective C, 64-разрядные

и, конечно, все работает, если добавить _OBJC_IVAR _ $ _ PluginBase.fConn в файл экспорта ... но только для 64-битной сборки, 32-разрядный не знает о таких вещах: « Неопределенные символы: "_OBJC_IVAR _ $ _ PluginBase.fConn", ссылки из: -exported_symbol [s_list] параметр командной строки "

Единственное решение, кажется, еще один обходной путь: иметь два экспорта файлов. Но ... Я не могу использовать параметр «Добавить настройку сборки» для параметра EXPORTED_SYMBOLS_FILE: -S.

Любые идеи (помимо использования общедоступных методов доступа)?

ответ

1

Вы можете настроить параметры построения архитектуры с помощью файлов xcconfig. Похоже, что это невозможно через GUI. Создайте файл конфигурации сборки, содержащий следующее:

EXPORTED_SYMBOLS_FILE[arch=i386]=$(SRCROOT)/SymbolsList32Bit 
EXPORTED_SYMBOLS_FILE[arch=x86_64]=$(SRCROOT)/SymbolsList64Bit 

, а затем в настройках проекта, установить этот файл будет строить конфигурации для проекта, и вы должны быть хорошо идти. (Очевидно, вам нужно будет указать пути к вашим файлам, но, надеюсь, вы получите эту идею.)

Это сработало для меня. (FWIW вы можете также conditionalize по имени SDK, как MY_SETTING [= iphoneos SDK *] = FOO, MY_SETTING [= SDK макинтош] = BAR, и т.д.)

Надежда, что помогает!

Смежные вопросы