Горе статической библиотеки в iPhone 3.x с категориями и библиотеками C - PullRequest
1 голос
/ 06 апреля 2010

У меня есть статическая библиотека (назовем это S), которая использует категорию (NSData + Base64 из MGTwitterEngine) и библиотеку C (в оболочке MiniZip) ZipArchive, файл мм ).

Эта статическая библиотека используется в проекте iPhone 3.x (назовем это A). Чтобы иметь возможность использовать библиотеку MiniZip, я включил ее файлы в проект A, а также статическую библиотеку S. Если нет, я получаю ошибки компиляции.

Project A отлично работает на симуляторе. Когда я запускаю его на устройстве, я получаю нераспознанные ошибки селектора при использовании категории.

Как указывалось здесь, похоже, есть ошибка компоновщика , которая влияет на категории в iPhone 3.x ( Категории в статической библиотеке для устройства iPhone 3.0 ). Обходной путь - добавить -all_load в другие флаги компоновщика проекта, который ссылается на статическую библиотеку.

Однако, если я сделаю это, то получу двойные ошибки символов, потому что я включил библиотеки MiniZip в проект A.

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

Как мне настроить проект A, чтобы он работал на симуляторе и устройстве с одинаковой конфигурацией?

1 Ответ

2 голосов
/ 06 апреля 2010

Вместо -all_load вы можете попробовать использовать -ObjC, который должен заставить компоновщик знать категории Objective-C без загрузки всех символов (в некоторых случаях это работает для меня, в других - нет).

Другой обходной путь - не включать библиотеку MiniZip в ваш проект (A), а только заголовочные файлы (которые являются единственными файлами, необходимыми для правильной компиляции вашего проекта). Затем компоновщик будет использовать библиотеку MiniZip, которая была связана с вашей статической библиотекой.

...