iPhone - ошибка компоновщика XCode 4 без вызова метода или использования объекта - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть проект, который включает общую библиотеку в качестве исходных файлов.
Некоторые из классов библиотек нуждаются в включении некоторых Frameworks (например, известной Apple Reachability).
Эти Frameworks не включены в проект, посколькуЯ не использую классы / методы, которые в них нуждаются.
У меня есть MyStandardLib.h, который ссылается на все заголовки библиотек и который включен в .pch в моем приложении.

Но ...

При создании моего приложения компоновщик генерирует ошибку ссылки для тех объектов, которые я не использую / не вызываю в приложении, поэтому они должны быть логически не связаны.

enter image description here

Например, если я удаляю из проекта инкриминированные классы и Frameworks, все работает нормально.

Если я добавляю необходимые Frameworks:

  • Это безумиедля каждого проекта из-за классов я не буду использовать
  • Это увеличивает размер файла моего приложения без всякой пользы (26 Ko -> 1,2 Mo)

Как избежать ошибки компоновщикаи избежать лиВот что не должно происходить:

  • сохранение моей библиотеки как есть в проекте (я не хочу предварительно скомпилированной библиотеки)
  • Не нужно включать все эти бесполезные Frameworks, пока я действительно не будунужны они

Ответы [ 2 ]

0 голосов
/ 05 сентября 2011

Причина этих ошибок очевидна, потому что для фреймворков, которые вы включаете в свой проект, требуются другие фреймворки (из того, что вы могли бы предоставить, они используют: Достижимость , CFNetwork Frameworkи CoreLocation Framework)

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

Если вы используете Framework A, который связан с Framework B, то если вы используете приложение Cиспользует фреймворк A, он также нуждается в фреймворке B, потому что фреймворки не совсем самодостаточны.

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

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

0 голосов
/ 05 сентября 2011

Вы можете указать, что связанная библиотека является необязательной. Это может помочь.

Помните, что динамическое связывание не доступно на iOS. Все статично: Можете ли вы создавать динамические библиотеки для iOS и загружать их во время выполнения?

...