Ошибка компиляции приложения iPhone со статическими библиотеками при сборке дистрибутива

StackOverflow https://stackoverflow.com/questions/1446772

Вопрос

В настоящее время я пытаюсь создать дистрибутив моего (первого) приложения для iPhone, чтобы его можно было загрузить в App Store.Я прошел весь процесс создания идентификатора приложения и профиля подготовки дистрибутива и, наконец, получил конфигурацию сборки Organizer и target, чтобы распознать ее.

Проблема в том, что при установке "Активной конфигурации" в "Дистрибутиве" (дубликат конфигурации "Release".согласно инструкциям Центра разработки iPhone) Я не могу заставить код скомпилироваться.Проект содержит ссылку на статическую библиотеку, которая содержит несколько классов, которые используются в качестве базовых классов во многих классах проекта.Таким образом, при сборке конфигурации дистрибутива компилятор выдает ошибки, сообщающие, что он не может найти базовые классы из статической библиотеки, и сборка завершается с ошибкой.

Если я переключу активную конфигурацию.для "Отладки" (как используется при разработке) вообще нет проблем, и приложение компилируется корректно, как и ожидалось.

Я не могу понять, в чем может быть проблема.Я нашел здесь еще один подобный вопрос, но, похоже, это другой случай:

Ошибки при распространении статической библиотеки iPhone и выпуске сборок (но не для отладки)

У Google также, похоже, не так много полезных результатов.Я также проверил информацию о цели в разделе сборки и переключался между конфигурациями "Debug" и "Distribution", чтобы проверить наличие каких-либо существенных различий, но пока никто не найден.На самом деле я не нашел никакой релевантной информации о статической библиотеке.Только на вкладке Общие информационного окна, но статическая библиотека отображается корректно в Прямых зависимостях.

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

Не могли бы вы, пожалуйста (ПОЖАЛУЙСТА :)), оказать некоторую помощь по этому поводу.Мы очень ценим любую помощь или подсказку.

Заранее благодарю вас!

Это было полезно?

Решение

Проверьте параметры сборки для конфигурации Debug; например, пути поиска заголовка для конфигурации отладки могут отличаться от конфигурации для распространения. Выберите меню Project > Отредактируйте настройки проекта и введите: Пути поиска по заголовку , чтобы проверить эти настройки для указанной Конфигурации . Если что-то отличается между конфигурациями, сделайте их одинаковыми для обеих.

Другие советы

Вот оно:

Чтобы выполнить сборку дистрибутива (согласно инструкциям Центра разработки iPhone), вы должны создать копию конфигурации "Release" и назвать ее "Дистрибутив", а затем создать проект в этой активной конфигурации.Проверяя "Пути поиска заголовка" в информационном окне цели для конфигураций отладки и распространения, я заметил разницу в значении, которое было установлено как (для обоих конфигураций):

${BUILD_STYLE}-${ИМЯ_ПЛАТФОРМЫ}/usr/локальный/включить

таким образом, это привело к замене $ {BUILD_STYLE}-$ {PLATFORM_NAME} на "Debug-iphoneos" и "Distribution-iphoneos" для каждой конфигурации.Все базовые классы из статической библиотеки хранились в папке "include", однако папки "Distribution-iphoneos" не было.

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

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

Может быть, это на самом деле базовые вещи, извините, я просто изучаю язык (и XCode) :).

Надеюсь, это поможет, еще раз спасибо Алексу.

С уважением

Я слышал о проблемах компоновщика с iPhone OS 3.0 SDK;Некоторые из обходных путей включают добавление -all_load к флагам компоновщика при сборке вашего проекта (хотя это может иметь непреднамеренные побочные эффекты).Другим вариантом является обновление до 3.1 SDK, где, я полагаю, эти проблемы были решены.Конечно, это может быть вообще не ваша проблема...

Другие места, где можно обратиться за помощью:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top