Как объединить толстые статические библиотеки для использования в приложении iOS? - PullRequest
2 голосов
/ 03 июня 2019

Я очень запутался, когда читал о статических библиотеках и динамических библиотеках, а затем, наконец, о фреймворках, Cocoa Touch Frameworks и Cocoa Touch Static Libraries.

Единственное, что я понял, это то, что статические библиотеки (фреймворки?)добавляется в время компиляции , а динамические библиотеки нет;они загружаются динамически во время выполнения.

Q:

Я хотел бы добавить несколько статических библиотек (они заканчиваются на ".a", универсальные толстые двоичные файлы, скомпилированные для множества iOSтакие архитектуры, как armv7 и arm64) для моего приложения iOS.Желательно, если возможно, чтобы это было сделано путем объединения всех этих библиотек вместе (... в платформу?).Я также хочу написать оболочку Swift вокруг этих библиотек C.Эта обертка наконец будет использоваться в моем приложении.Тем не менее, оболочка не должна быть частью моего приложения, я хочу отдельный проект (опять же, фреймворк?) Для этого (можно ли объединить библиотеки и оболочку?).

Чем я сейчас занимаюсьпытаясь сделать, это написать оболочку Swift.Итак, я начал с Cocoa Touch Framework (потому что я думал, что это будет лучшей идеей), добавил библиотеки C и заголовки (на самом деле через podspec, хотя я не думаю, что это имеет значение, поскольку я мог бы также добавить их вручную), добавил заголовок моста (хотя некоторые другие пользователи сообщали, что фреймворки не работают с мостовыми заголовками, моя сборка прошла успешно).Это правильный путь?

Первая статья, которую я прочитал , была этой (называемой «Статические и динамические библиотеки и фреймворки в iOS») .

Затем я прочитал множество статей о переполнении стекакак компилировать статические библиотеки, как структурированы библиотеки и фреймворки, что фреймворки - это на самом деле просто набор библиотек и их заголовков (или около того).
Мне также кажется, что с годами в Apple все изменилось, как будто они изменили названия и возможности (Cocoa Touch Framework (это динамическая среда?), Похоже, была представлена ​​в выпуске iOS 8 и т. Д.)что еще больше усложнило мне понимание того, как все это работает.
Не поймите меня неправильно, я просто говорю это, потому что хочу прояснить, что я действительно провел какое-то исследование (я думаю, довольно много)), но мне действительно нужна помощь, чтобы все было правильно.По сути, я просто ищу следующий шаг, который я должен сделать, чтобы импортировать все эти библиотеки в мое приложение.

1 Ответ

0 голосов
/ 14 июня 2019

Есть две части к этому:

  • Создание фреймворка Mach-O image
  • Сортировка заголовков

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

Единственное осложнение - Objective-C. Если какая-либо из ваших статических библиотек содержит код Objective-C, компоновщик может в итоге удалить его. Есть флаг компоновщика, -ObjC, который отключает это.

Разбирать заголовки немного сложнее. Фреймворки имеют собственное представление о том, как должны быть организованы заголовки, и это, как правило, не согласуется с традициями UNIX (что, как вам кажется). Критический вопрос - как ваш клиентский код использует эти заголовки. Если код клиента делает что-то вроде:

#include <lib_1/----1.h>  

Вы должны сохранить этот макет на диске, и при работе с фреймворком не существует очевидного способа сделать это. OTOH, если у вас есть контроль над клиентским кодом, и вы можете изменить его следующим образом:

#include <MyFramework/MyFramework.h>  

вы могли бы создать зонтичный заголовок в вашей среде, включить в него все ваши публичные заголовки, и все готово.

Этот ответ был скопирован с форумов разработчиков Apple.

...