Кросс-компиляция библиотеки с открытым исходным кодом для iOS и XCode 4.3

Я хотел бы использовать отличную библиотеку stringencoders в приложении iOS. Это довольно типичная библиотека c с конфигурацией script, сгенерированной autoconf и makefile.

Что я хотел бы сделать, это скомпилировать версии arm7 и i386 на Mac OSX, а затем использовать lipo для создания живого бинарного файла.

Мне сложно понять, как убедить инструменты сборки для создания своих бинарных файлов, специфичных для платформы. Там есть несколько статей и даже несколько скриптов, но большинство из них нацелены на XCode 4.2 и не работают с 4.3.

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

Вы успешно сделали что-нибудь подобное? Мне бы понравились некоторые указатели!

BTW: "импортировать весь исходный код в ваш проект" НЕ является жизнеспособным решением. Таким образом, безумие.

Спасибо.

Ответ 1

Я портировал несколько библиотек с открытым исходным кодом на iOS (см. порты iOS). Я нашел самый надежный способ для переноса библиотеки - создать новый проект Xcode с целью сборки для статической библиотеки iOS. Важно отметить, что Apple не позволит вашему приложению iOS содержать динамические библиотеки, если вы планируете распространять свое приложение в магазине iTunes App, поэтому вам не удастся использовать библиотеки FAT.

Это шаги, которые я обычно выполняю при переносе библиотек в iOS, которые обычно создаются с помощью GNU Autotools:

  • Запустите. /configure с соответствующими флагами в OS X.
  • Убедитесь, что библиотека правильно построена на OS X с помощью make.
  • Создайте новый проект Xcode с использованием шаблона статической библиотеки iOS.
  • Добавьте config.h из предыдущего запуска configure в проект Xcode.
  • Прочитайте файл automake (Makefile.am) и добавьте ссылающиеся источники в целевые объекты automaker к цели Xcode для статической библиотеки.
  • Скопируйте флаги CPP (т.е. -DHAVE_CONFIG_H) из файла automake в настройки сборки в Xcode.
  • Компилировать в Xcode и запускать запущенные ошибки (обычно путем добавления отсутствующих заголовков включают пути или отсутствующие исходные файлы).

Обычно я использую структуру каталогов:

project/
project/ported-project.xcodeproj
project/project-x.x.x.tar.gz
project/project-x.x.x
project/project -> project-x.x.x

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

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

Ответ 2

Возможно ли добавить исходные файлы (например, файлы .c) в ваш проект напрямую?

Ответ 3

Цель C - это надмножество C, поэтому я удивлен тем, что код не работал прямо из коробки в XCode 4. Вы пропускаете что-то там? просто предлагая

Ответ 4

Создайте свои файлы проекта с помощью gyp: http://code.google.com/p/gyp/ Я использую его для обмена библиотеками между win/osx/ios и linux (pi).