【问题标题】:How to build ASSIMP Library for iOS (Device and Simulator) with boost-library?如何使用 boost-library 为 iOS(设备和模拟器)构建 ASSIMP 库?
【发布时间】:2011-10-05 05:40:36
【问题描述】:

我想在 iOS 项目中使用 ASSIMP 库 http://assimp.sourceforge.net。不幸的是,我对 makefile 和那些东西不是很有经验,所以我需要一些帮助。

我已经下载了源代码,首先我尝试使用 make 构建(在代码子文件夹中) 在makefile中我添加了INCLUDEFLAGS = -I/Lib,因为我的boost头文件在/Lib/boost 执行 make static 成功并出现一些警告。生成一个静态库 (.a)。

然后我尝试将 .a 文件添加到我的 xcode-project 并将 assimp-header 文件夹指定为附加包含目录(其他搜索路径)。链接失败,提示库没有正确的架构(模拟器需要 i386)

file libassimp.a 输出:“libassimp.a:当前 ar 存档随机库”

如何在 iOS 设备上为 i386 架构和 arm6 或 arm7 构建库?

可以只使用 boost-headers 还是将 boost 构建为库更好/必要?目前我只使用 boost 标头,这应该没问题,因为 boost 是一个仅标头的库?!

还有一个 cmake - makefile (CMakeLists.txt)。 cmake 是构建库的推荐方式,但我对 cmake 没有任何经验。

或者另一个想法:是否可以通过 xcode 构建库? 最终结果应该是针对 i386、arm6 和 arm7 架构的库。

我该怎么办?怎么做?


编辑:

我刚刚发现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

这是否意味着无法为 ARM 架构编译 ASSIMP 库?

【问题讨论】:

  • 我能够使用 Developer/Platforms/iPhoneSimulator.platform/Developer 成功构建 i386 架构,但它不适用于使用 iPhone.platform SDK 的 arm 架构;它在上述预处理器检查“错误未知架构”时失败

标签: ios boost makefile cmake


【解决方案1】:

我个人不做任何 iOS 开发,但我知道其他人已经使用 Xcode 为他们的 iDevices 成功编译了 Assimp。发行版中应该包含一个 Xcode 3 项目,虽然我不知道您是否可以在不进一步修改的情况下使用它。

架构预处理器定义目前仅用于记录输出(在code/Importer.cpp),同时对 ARM 的支持已添加到主干(确切地说是 r919)。

【讨论】:

  • 它适用于 xcode 项目。我不得不从code 文件夹中添加一些丢失的文件。最好是删除代码文件夹的引用并完全添加它 - 然后所有文件都在那里。
【解决方案2】:

在 iOS 设备上使用 assimp 时我也遇到了一些问题。

如果有人也遇到类似问题,我会这样做 - 类似于上面 Artur Sampaio 的示例,但有一些区别:

  1. https://github.com/assimp/assimp获取最新的assimp,即git clone git://github.com/assimp/assimp.git

  2. cd 进入 assimp 目录并打开 CMakeLists.txt。由于某种原因,make 文件找不到我的 glut 和 gl 库,所以我注释掉了 CMakeLists.txt 中涉及制作样本的行,即“IF (BUILD_ASSIMP_SAMPLES)”代码块。可能有一种简单的方法来指出这些,但由于我不需要这些示例,所以我只是将这些行注释掉了。

  3. cd 到 port/iOS/,然后 sudo ./build_ios.sh(编译所有 3 个版本的 lib 需要几分钟)。

  4. 1234563 arm6 或 arm7 设备)。
  5. 要让它在 XCode 4.3.2 中工作,请将 libassimp.a 文件拖放到我的项目中(从 finder 中)。您不必将其实际复制到您的项目目录中,但这样做也不会造成伤害。

  6. 由于某种原因,除非您明确链接到 libz 动态库,否则构建仍然会失败。从 XCode 文件列表中单击主项目,选择 TARGETS,然后单击 Build Settings 选项卡,向下滚动到 Linking 部分,然后在“Other Linker Flags”下添加“/usr/lib/libz.dylib”。

  7. github 上当前版本的 assimp 似乎对代码进行了一些重组,虽然我从 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。

此外,您可能需要确保在执行此操作之前已卸载其他版本的 assimp(例如从 macports 或 brew)。

【讨论】:

    【解决方案3】:

    我发现一个人已经根据您的需要更改了项目设置的分支。 https://github.com/blandinw/assimp/tree/ios-xcode46/doc

    【讨论】:

      【解决方案4】:

      我所做的是: 下载 Assimp repo 的 1090 版本: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/ 检查库

      希望有效

      【讨论】:

        猜你喜欢
        • 2019-01-10
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2018-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多