问题 如何使用boost-library为iOS(设备和模拟器)构建ASSIMP库?


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

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

然后我尝试将.a文件添加到我的xcode项目中,并将assimp-header文件夹指定为附加的include目录(Other Search Paths)。链接失败的消息是库没有正确的架构(模拟器需要i386)

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

我如何为i386架构和arm6或arm7构建库,无论我在iOS设备上需要什么?

是否可以仅使用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库?


11329
2017-07-14 10:41


起源

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


答案:


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

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


5
2017-07-15 19:58



它与xcode项目一起使用。我不得不添加一些丢失的文件 code 夹。最好是删除代码文件夹的引用并完全添加 - 然后所有文件都在那里。 - j00hi


我也有一些问题让他们在iOS设备上工作。

以下是我所做的事情,以防任何人也有类似的问题 - 类似于上面的Artur Sampaio的例子,但有一些差异:

  1. 得到最新的助手 https://github.com/assimp/assimp,即git clone git://github.com/assimp/assimp.git

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

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

  4. 现在,如果你cd到assimp / lib / ios和lipo -info libassimp.a,你会看到该库是一个带有i386,arm6和arm7架构的胖文件(并且可以在模拟器和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)。


4
2018-06-30 20:06





我找到了分支,其中一个人已经根据您的需求更改了项目设置。 https://github.com/blandinw/assimp/tree/ios-xcode46/doc


2
2018-06-03 09:39



为小牛+ Xcode5工作 - Stpn


我做的是: 下载Assimp回购的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 /中的库

希望有效


0
2018-05-18 04:28