Как собрать библиотеку ASSIMP для iOS (устройство и симулятор) с boost-библиотекой? - PullRequest
11 голосов
/ 14 июля 2011

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

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

Затем я попытался добавить .a-файл в свой xcode-проект и указал папку assimp-header в качестве дополнительного каталога 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?

Ответы [ 4 ]

5 голосов
/ 15 июля 2011

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

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

4 голосов
/ 01 июля 2012

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

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

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

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

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

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

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

  6. по какой-то причине сборка все равно будет неудачной, если вы явно не свяжетесь с динамической библиотекой libz. Выберите основной проект из списка файлов XCode, выберите TARGETS, затем перейдите на вкладку «Build Settings», прокрутите вниз до раздела «Linking» и добавьте «/usr/lib/libz.dylib» в разделе «Другие флаги компоновщика».

  7. текущая версия 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"

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

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

2 голосов
/ 03 июня 2013

Я нашел ветку, где один парень уже изменил настройки проекта для ваших нужд.https://github.com/blandinw/assimp/tree/ios-xcode46/doc

0 голосов
/ 18 мая 2012

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

распаковать

cd ~ / Downloads / trunk / port / iOS

sudo./build_ios.sh

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

wait ...

проверьте libs в ~ / Downloads / trunk /libs / ios /

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...