Рамки в ios содержат статическую или динамическую библиотеку внутри

Я сталкивался с несколькими сайтами, описывающими, что фреймворки могут содержать как статическую, так и динамическую библиотеку. Но как мне определить, что на самом деле содержит фреймворк - это динамическая или статическая библиотека? Сначала я подумал о помощи расширения (.a для статической библиотеки,.dylib для динамической библиотеки), но все, что я мог видеть в рамках, на котором я экспериментировал, это то, что не было предоставлено никаких расширений для двоичного файла, который был упакован внутри. Есть ли способ, которым я могу найти, является ли это статическая библиотека или динамическая библиотека.

Также я прочитал пост Лэндона Фуллера о статических библиотеках http://landonf.bikemonkey.org/code/ios/Radar_15800975_iOS_Frameworks.20140112.html в котором он упоминает, что фреймворки предоставляют двухуровневое пространство имен для библиотек, но охватывают ли они обычные символы отладки, а не только зависимости и это работает даже для статических библиотек, упакованных в рамках.

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

Также, по словам этого автора, http://ddeville.me/2014/04/dynamic-linking/ framework представляет собой пакет или пакет, содержащий динамическую библиотеку, заголовочные файлы и ресурсы.

Согласно следующему посту библиотеки? Статическая? Динамический? Или рамки? Проект внутри другого проекта говорит, что фреймворки могут содержать как статические, так и динамические библиотеки.

Я так смущен этим. Может кто-нибудь объяснить инфраструктуру в iOS относительно того, что они содержат и как они работают в терминах двухуровневого пространства имен.

1 ответ

Это просто определить, когда расширение файла явное

  • .a - статическая библиотека
  • .dylib - динамическая библиотека

вы можете использовать file команда

file /some_path/<framework_name>.framework/<framework_name>

//possible results
current ar archive random library //static library
dynamically linked shared library //dynamic library

Его можно изменить в настройках сборки. Mach-O type [О] отStatic Library target к Dynamic library а также .a файл будет сгенерирован, file команда покажет вам dynamically linked shared library но это будет статическая библиотека

[Словарь]
[Статическая и динамическая структура]

Чтобы ответить на первую часть вашего вопроса, да, вы правильно понимаете, что Framework - это просто структура каталогов, которая объединяет образ библиотеки (скомпилированный машинный код, заголовки, ресурсы и т. Д.). Чтобы проверить, является ли Framework фактически статической библиотекой или динамической, используйте следующую команду

file Path/To/YourLib.framework/YourLib

Если вывод конкретной архитектуры (armv7, arm64 и т. Д.) Говорит ar archive это статическая библиотека, с другой стороны, если для любой архитектуры это говорит dynamically linked shared library тогда неудивительно, что динамическая библиотека.

Если вы сами создаете каркасный проект, вы можете создать статическое или динамическое изображение, установив Mach-O Type Построение Настройка вашего проекта.

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

Другие вопросы по тегам