用于Unity

时间:2017-07-26 21:06:37

标签: ios opencv unity3d

我正在尝试使用iOS版本的ORB_SLAM2(https://github.com/ygx2011/ORB_SLAM2-IOS)作为Unity(Unity 5.5)项目的插件。为了能够将其用作插件,我从上面的iOS应用程序创建了一个静态库(位于Assets / Plugins / iOS /目录中的.a文件),可用于子类化UnityAppController。

现在,在Unity播放器设置中,我将脚本后端更改为IL2CPP,将架构更改为arm64。我这样做的原因是因为根据Unity 5.5 Legacy文档,IL2CPP是唯一支持在iOS上部署到ARM 64位的脚本后端。

当我构建并运行生成的Xcode项目时,我在arm64架构方面遇到以下错误。

  

架构arm64的未定义符号:

     

" cv :: String :: deallocate()",引自:        libvBSlamLib.a中的cv :: String :: ~String()(ORBSlamLib.o)        libvBSlamLib.a中的cv :: String :: operator =(cv :: String const&)(ORBSlamLib.o)

     

" cv :: error(int,cv :: String const&,char const *,char const *,int)",引自:cv :: Mat :: operator cv :: Vec libORBSlamLib.a(ORBSlamLib.o)中的libORBSlamLib.a(ORBSlamLib.o)cv :: Mat :: Mat(int,int,int,void *,unsigned long)中的()const

     

" cv :: Mat :: Mat(cv :: Mat const&,cv :: Range const&,cv :: Range const&)",从cv :: Mat :: colRange引用(int,int)const liborBSlamLib.a(ORBSlamLib.o)cv :: Mat :: rowRange(int,int)const liborBSlamLib.a(ORBSlamLib.o)cv :: mat :: col(int)const in libORBSlamLib .A(ORBSlamLib.o)

     

&#34; ORB_SLAM2 :: System :: TrackMonocular(cv :: Mat const&amp;,double const&amp;)&#34;,引自: - liborBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)< / p>      

&#34; cv :: projectPoints(cv :: _ InputArray const&amp;,cv :: _ InputArray const&amp;,cv :: _ InputArray const&amp;,cv :: _ InputArray const&amp;,cv :: _ InputArray const&amp;,cv :: _OutputArray const&amp;,cv :: _ OutputArray const&amp;,double)&#34;,引自: - liborBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)

     

&#34; cv :: circle(cv :: InputOutputArray const&amp;,cv :: Point ,int,cv :: Scalar_ const&amp;,int,int,int)&#34; ,引自: - liborBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)

     

&#34; _inverse&#34;,引自:         Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_inverse_m3594686272         Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_KFUpdate_m728291423

     

&#34; cv :: noArray()&#34;,引自:          - libORBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)

     

&#34; _multiply&#34;,引自:         Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_multiply_m1606521480         Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_KFPredict_m2919581928         Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_KFUpdate_m728291423

     

&#34; _subtract&#34;,引自:         Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_subtract_m949145514         Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_KFUpdate_m728291423

     

&#34; cv :: Rodrigues(cv :: _ InputArray const&amp;,cv :: _ OutputArray const&amp;,cv :: _ OutputArray const&amp;)&#34;,引自:          - libORBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)

     

&#34; cv :: fastFree(void *)&#34;,引自:         SlamAppController.o中的_mGetPose         libvBSlamLib.a中的cv :: Mat :: ~Mat()(ORBSlamLib.o)

     

&#34; _add&#34;,引自:         Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_add_m3985982311

我注意到大多数这些错误都发生在opencv函数中,所以我交叉检查项目中包含的opencv2.framework是否支持arm64。但是从opencv论坛上我们提到最新版本的opencv确实支持arm64(我克隆了opencv GitHub存储库并按照opencv文档中的这些说明来生成框架)。我已经使用了How to update our static library architecture for suporting arm64 Build?http://answers.unity3d.com/questions/912000/apple-mach-o-linker-error-when-building.htmlUndefined symbols for architecture armv7等帖子中常用的推荐解决方案。在我发现的论坛中,以下版本设置适用于其他人。

  

架构 - 标准ARCHS。

     

仅构建活动架构 - 将调试设置为YES;发布设置为NO。

     

支持的平台 - iphoneos

     

有效架构 - arm64 armv7 armv7s

     

框架搜索路径 - $(PROJECT_DIR)opencv2.framework所在的位置。

     

C ++语言方言 - GNU ++ 11(无法将此设置为C ++ 11,因为另一个名为GLKit的框架需要GNU ++ 11 - 这可能是问题吗?有解决方法吗? )

     

C ++标准库 - 支持C ++ 11的libc ++ LLVM C ++标准库。

我是Unity&amp; amp;的初学者iOS和任何帮助将非常感激。我在我的项目中使用Unity 5.5.2f1,Xcode 9 beta 3和带有iOS 11 beta 4的iPhone 7 Plus。

P.S。如果直接编译为iOS应用程序,ORB_SLAM2-IOS可以正常工作。仅当我尝试将其用作静态库时才会出现此问题。

谢谢!

0 个答案:

没有答案