Я создаю статическую библиотеку для использования в приложениях iPhone. Он содержит несколько исходных файлов, которые не экспортируют символы, все, что они делают, - это создают статический экземпляр класса, который затем запускает некоторый код в своем конструкторе, который регистрирует различные вещи с помощью класса центрального менеджера в другом месте. Все это прекрасно работает, когда код создается как часть стандартного приложения iPhone, но когда он разделен на статическую библиотеку, эти файлы не превращаются в конечный двоичный файл приложения, поэтому конструкторы для экземпляров закрытого класса, которые они содержат, не не запустить, и это вызывает проблемы. Я отключил все опции сборки, связанные с зачисткой и так далее, как для статической сборки библиотеки, так и для окончательной сборки приложения.
Я столкнулся с этой проблемой на компиляторе Metrowerks некоторое время назад, однако в этом случае это происходило даже тогда, когда код был встроен в одно приложение без каких-либо промежуточных библиотек. Решение было довольно простым: просто используйте __declspec(force_export)
на экземплярах частного класса, и все хорошо.
Есть ли эквивалент для GCC / iPhone? Я использую Xcode 3.1.4 с GCC 4.2 и нацеливаюсь на iPhone OS 3.1. В качестве альтернативы, есть ли какой-нибудь способ указать приложению связываться в каждом объектном файле в статической библиотеке независимо от того, есть ли на него явная ссылка? Используя ar
, я подтвердил, что полный набор объектных файлов превращается в статическую библиотеку.
Заранее спасибо.