Как создать библиотеку ASSIMP для iOS (устройство и симулятор) с помощью boost-library?

Я хочу использовать библиотеку ASSIMP http://assimp.sourceforge.net в проекте iOS. К сожалению, я не очень разбираюсь в make файлах и т.д., Поэтому мне нужна помощь.

Я загрузил исходники и сначала попытался построить с make (в подкаталоге code) В make файле я добавил INCLUDEFLAGS = -I/Lib, потому что мои заголовочные файлы boost находятся в /Lib/boost Выполнение make static выполняется с некоторыми предупреждениями. Создается статическая библиотека (.a).

Затем я попытался добавить .a файл в свой xcode-проект и указал папку заголовка assimp в качестве дополнительного каталога include (Другие пути поиска). Ошибка связи с сообщением о том, что библиотека не имеет правильной архитектуры (i386 требуется для симулятора)

file libassimp.a выходы: "libassimp.a: текущая архивная случайная библиотека"

Как я могу построить библиотеку для архитектуры i386 и для arm6 или arm7, что мне нужно на устройстве iOS?

Можно ли использовать только заголовки boost-заголовков или лучше/необходимо создавать boost как библиотеку? В настоящее время я использую только заголовки boost, что должно быть хорошо, поскольку boost - это только библиотека заголовков?!

Существует также файл cmake-makefile (CMakeLists.txt). cmake - это рекомендуемый способ создания библиотеки, но у меня нет опыта работы с cmake.

Или другая мысль: возможно ли построить библиотеку через xcode? Конечным результатом должна стать библиотека для архитектуры i386, arm6 и arm7.

Что мне делать? И как?


Edit:

Я только что обнаружил, что в файле aiDefines.h есть следующие проверки препроцессора:

#if defined(_MSC_VER)
    // See http://msdn.microsoft.com/en-us/library/b0084kay.
#   if defined(_M_IX86)
#       define ASSIMP_BUILD_X86_32BIT_ARCHITECTURE
#   elif defined(_M_X64)
#       define ASSIMP_BUILD_X86_64BIT_ARCHITECTURE
#   elif defined(_M_IA64)
#       define ASSIMP_BUILD_IA_64BIT_ARCHITECTURE
#   else
#       error unknown architecture
#   endif
#elif defined(__GNUC__)
    // See http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html.
#   if defined(__x86_32__) || defined(__i386__)
#       define ASSIMP_BUILD_X86_32BIT_ARCHITECTURE
#   elif defined(__x86_64__)
#       define ASSIMP_BUILD_X86_64BIT_ARCHITECTURE
#   elif defined(__ppc__)
#       define ASSIMP_BUILD_PPC_32BIT_ARCHITECTURE
#   else
#       error unknown architecture
#   endif
#else
#   error unknown compiler
#endif

Означает ли это, что невозможно собрать библиотеку ASSIMP для архитектуры ARM?

Ответ 1

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

Определения препроцессора архитектуры в настоящее время используются только для вывода журнала (в code/Importer.cpp), и поддержка ARM была добавлена ​​в магистраль тем временем (r919, если быть точным).

Ответ 2

У меня также было несколько проблем, связанных с доступом к устройствам iOS.

Вот что я сделал, если у кого-то тоже есть похожие проблемы - аналогично приведенному выше примеру Артура Сампайо, но с несколькими отличиями:

  • получить последний прокси из https://github.com/assimp/assimp, то есть git clone git://github.com/assimp/assimp.git

  • cd в каталог assimp и открыть CMakeLists.txt. По какой-то причине файл make не смог найти мои переполнения и gl lib, поэтому я прокомментировал строки в CMakeLists.txt, которые ссылались на создание образцов, то есть блок кода IF (BUILD_ASSIMP_SAMPLES). Вероятно, это простой способ указать на них, но поскольку мне не нужны образцы, я просто прокомментировал эти строки.

  • cd to port/iOS/, а затем sudo./build_ios.sh(для компиляции всех 3 версий lib) требуется несколько минут.

  • теперь, если вы cd для assimp/lib/ios и lipo -info libassimp.a, вы увидите, что библиотека представляет собой полный файл с i386, arm6 и arm7 (и будет работать как на симуляторе, так и на arm6 или arm7).

  • чтобы заставить его работать в XCode 4.3.2, перетащите и отпустите файл libassimp.a в мой проект (от искателя). Вам не нужно копировать его в каталог проекта, но это не повредит, если вы это сделаете.

  • по какой-то причине сборка по-прежнему будет работать, если вы явно не ссылаетесь на динамическую библиотеку libz. Нажмите основной проект из списка файлов XCode, выберите TARGETS, затем щелкните вкладку "Параметры сборки", прокрутите вниз до раздела "Связывание" и добавьте "/usr/lib/libz.dylib" в разделе "Другие флаги компоновщика".

  • текущая версия assimp на github, похоже, немного изменила код, и, хотя все примеры, которые я тестировал на веб-сайте assimp, все они требуют разных или, по крайней мере, переименованных файлов заголовков:

Здесь я прокомментировал предыдущие имена заголовков и ниже - новые имена:

//#include <assimp.hpp>      // C++ importer interface
//#include <aiScene.h>       // Output data structure
//#include <aiPostProcess.h> // Post processing flags
#include "Importer.hpp"
#include "scene.h"
#include "postprocess.h"

После этого момента я смог использовать омлет на своем iPad.

Кроме того, вы, вероятно, захотите убедиться, что вы удалили другие версии assimp перед этим (например, из macports или brew).

Ответ 4

Что я сделал: загрузить версию 1090 из репозитория Assimp: http://assimp.svn.sourceforge.net/viewvc/assimp/trunk/?pathrev=1090

распаковать

cd ~/Downloads/trunk/port/iOS

sudo./build_ios.sh

(замените ~/Downloads/trunk на путь к распакованной папке)

подождите...

проверить библиотеки на ~/Downloads/trunk/libs/ios/

надеюсь, что работает