我试图使用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)cv :: String :: operator =( cv :: String const&)在libORBSlamLib.a(ORBSlamLib.o)“cv :: error(int,cv :: String const&,char const *,char const *,int)”中,引自:cv :: Mat :: liborBSlamLib.a中的运算符cv :: Vec()const liborBSlamLib.a(ORBSlamLib.o)cv :: Mat :: Mat(int,int,int,void *,unsigned long)(ORBSlamLib.o)“cv :: Mat :: Mat(cv :: Mat const&,cv :: Range const&,cv :: Range const&)“,从libvBSlamLib.a(ORBSlamLib.o)cv中的cv :: Mat :: colRange(int,int)const引用:: mat :: rowRange(int,int)const liborBSlamLib.a(ORBSlamLib.o)cv :: Mat :: col(int)const in libORBSlamLib.a(ORBSlamLib.o)“ORB_SLAM2 :: System :: TrackMonocular( cv :: Mat const&,double const&)“,引自: - liborBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)”cv :: projectPoints(cv :: _ InputArray const&,cv :: _ InputArray const&,cv :: InputArray const&,cv :: _ InputArray const&,cv :: _ Inp utArray const&,cv :: _ OutputArray const&,cv :: _ OutputArray const&,double)“,引自: - liborBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)”cv :: circle(cv :: InputOutputArray const&,cv :: Point,int,cv :: Scalar const&,int,int,int)“,引自: - liborBSlamLib.a(ORBSlamLib.o)中的[ORBSlamLib libProcessImage:]”_ inverse“,引自:Bulk_Assembly-CSharp_3中的_LLIMUPosMgr_inverse_m3594686272 Bulk_Assembly-CSharp_3.o“cv :: noArray()”中的.o LLIMUPosMgr_KFUpdate_m728291423,引自: - liborBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)“ multipulti”,引自:Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_multiply_m1606521480 _LLIMUPosMgr_KFPredict_m2919581928在Bulk_Assembly-CSharp_3.o _LLIMUPosMgr_KFUpdate_m728291423在Bulk_Assembly-CSharp_3.o “_subtract”,从引用:在Bulk_Assembly-CSharp_3.o在Bulk_Assembly-CSharp_3.o _LLIMUPosMgr_KFUpdate_m728291423 _LLIMUPosMgr_subtract_m949145514“CV ::罗德里格斯(CV :: _ InputArray常量和,CV :: _OutputA rray const&,cv :: _ OutputArray const&)“,引自: - liborBSlamLib.a中的[ORBSlamLib libProcessImage:](ORBSlamLib.o)”cv :: fastFree(void *)“,引自:SlamAppController.o中的_mGetPose cv: :在liborBSlamLib.a(ORBSlamLib.o)“_add”中的Mat ::〜Mat(),引自:Bulk_Assembly-CSharp_3.o中的_LLIMUPosMgr_add_m3985982311

我注意到大多数这些错误都发生在opencv函数中,所以我交叉检查项目中包含的opencv2.framework是否支持arm64 . 但是从opencv论坛来看,_415813已经开始使用来自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标准库 - libc LLVM C标准库C 11支持 .

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

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

谢谢!