Если в приложении используется несколько статических библиотек (имеющих расширение.a), то иногда сборка приложения при изменении некоторых библиотек превращается в сущий кошмар.
Вот что мне удалось выяснить опытным путём, потратив на это многие часы.
1) Если что-то изменяется в одной из библиотек, от которой зависят одна или несколько других библиотек, то лучше всего сразу же радикально уничтожить не только сами устаревшие бинарные файлы этих библиотек, но и все промежуточные объектные файлы.
2) При переходе с Debug на Release или обратно разработчики нередко удаляют для подстраховки ненужные библиотеки (например из дерева проекта удаляют Debug-версии статических либ и добавляют Release-версии тех же самых статических либ, т.е. библиотек). Я поддерживаю такое решение, так как невозможно определённо сказать, будет ли Xcode правильно подбирать нужную либу из 2-х вариантов при сборке приложения. Увы, это уже подтверждается опытом. Но оказывается этой меры недостаточно! Нужно либо физически удалить ставшие ненужными (даже ненужными на время) бинарные файлы библиотек, либо просто переместить их в другое место (или хотя бы переименовать папку, где они были собраны в одном месте). Оказывается, часто случается так, что Xcode упорно отказывается линковать к приложению указанную в дереве проекта нужную вам библиотеку (например, Release) и линкует ту прежнюю библиотеку, которую вы уже убрали из дерева проекта. НО И ЭТОГО БЫВАЕТ МАЛО!!! Нужно удалять даже промежуточные объектные файлы (особенно в случаях, когда вы решили вообще отказаться использовать какую-то библиотеку, переместив её код непосредственно в проект.
Очень надеюсь, что Apple когда-нибудь исправит эти баги в Xcode (или в iPhone SDK).
вторник, 27 апреля 2010 г.
Проблемы со статическими библиотеками при разработке iPhone-приложений
Ярлыки:
линкование,
линковка,
проблемы,
статическая библиотека,
iphone sdk,
link,
static lib
Подписаться на:
Комментарии к сообщению (Atom)
Постоянные читатели
Архив блога
-
▼
2010
(55)
-
▼
апреля
(28)
- Стив Джобс рассказал, почему Apple "не пускает" Fl...
- Работа с локальным SVN-репозитарием
- Как в Mac OS снять блокировку/защиту из всех файло...
- Как получить пути к наиболее часто используемым па...
- Как автоматически копировать нужные заголовки в ну...
- Чем заменить функцию stricmp в iPhone-проекте
- Легендарный редактор vi
- Как выяснить причину EXC_BAD_ACCESS в Xcode
- Что делать, если в Xcode-отладчике невозможно пере...
- Как изменить размер стека потока средствами pthrea...
- Интересные материалы для C++ программистов в блоге...
- Принципы Agile Software Development
- Знакомство с компилятором GCC
- Антипаттерны
- man xcodebuild (справка по команде)
- Как сделать скрипт для компиляции и линковки сразу...
- Какой аналог у SetEvent (Win32) в pthread?
- Pthread Condition Variables и Windows Events (Креа...
- Шпаргалка по TinyXML
- Мои любимые книги по программированию
- Из блога Сергея Меднова: Знает ли Apple, для чего ...
- Вопросы на проверку знания языка C++
- Использование pthread (POSIX) функций для многопот...
- Xcode — странные выходки отладчика
- Проблемы со статическими библиотеками при разработ...
- Переименование Xcode-проекта и приложения (для iPh...
- Как совмещать C++ и Objective C код в одном файле ...
- Как удалить badge-кружочки из TabBar вкладок
-
▼
апреля
(28)
Комментариев нет:
Отправить комментарий