orbslam移植到ios--------注意事项5

Build Settings -> Apple Clang - Language - C++ -> C++ Language Dialect -> C++11[-std=c++11]
这么做,是因为orbslam得c++11版本才行(在CMakeLists.txt中可以看到)


头文件不能混编,混编代码从头文件移出来到.mm文件,保证头文件里面要么是纯正的c++,要么是纯正的oc,但是包含c是没关系的,因为都向下兼容c
之前之所以把#include放在头文件里,是因为担心放在.cpp文件里,如果加载两次,那么内存里也会加载两次你导入的库文件,这样很浪费内存空间,放到头文件里就只会导入一次。
但是现在,我把库文件(c++标准库,不包含我自己写的库文件)那些都放到.mm中,但import导入,编译器会自动判断,只加载一 次


相对路径,竟然必须#include "../Thirdparty/boost/archive/binary_oarchive.hpp"这么写,写成#include <../Thirdparty/boost/archive/binary_oarchive.hpp>这样就不行


OpenGL/gl.h file not found
导入一个框架:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Headers这个目录存在,直接复制OpenGL.framework就行,还有GLUT.framework
有时候你发现自己其实导入了OpenGL.framework,但是仍然找不到OpenGL/gl.h,除了看Build Phases -> Link Binary With libraries有没有添加进去,也可以通过文件访问OpenGL.framework,看里面有没有Headers文件夹,没有是不行的,因为.h文件都放在Headers里


Do not compile Asio library source with BOOST_ASIO_HEADER_ONLY defined
或者 boost下面的头文件 semantic error语法错误
前面一个是只导入了.h文件,没有导入静态库文件,使用Bosst.Asio接口时,需要依赖其他模块的库,所以可能后面导.a静态库文件时,少了一些(我直接全导进去了38个,主要是我也搞不懂要导哪几个)

后面一个是导入的头文件有问题,换个地方下载就好了
参考该处

$ cd boost_1_54_0
$ ./bootstrap.sh --with-toolset=clang --prefix=/path/to/your/build/directory
$ ./b2 install toolset=clang variant=debug debug-symbols=on cxxflags="-std=c++11 -stdlib=libc++" linkflags="-stdlib=libc++"

do not compile asio library source with boost_asio_header_only defined src.hpp
这个是说不能直接导入下载下来的boost里面的头文件和库文件,要编译一下

cd boost
./bootstrap.sh --prefix=path/to/installation/prefix
./b2 install

然后把path/to/installation/prefix路径里的include和lib导入到工程里


当这些问题都解决了之后,会发现突然出现一大片警告
主要是说我的工程是在ios 模拟器上跑的,但是我提供的OpenGL.framework和GLUT.framework,libpangolin.dylib,libboost.a是在macos/mac上跑的
但是我后面导的ios的OpenGLES.framework等并没有使下面的错误减少,反而多了一些,突然明白我之前可能少导了一些依赖包
在这里插入图片描述


在TARGETS->Build Settings尋找bitcode,將它關起來,OpenCV不支援bitcode
在这里插入图片描述

发布了93 篇原创文章 · 获赞 29 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/ljl1015ljl/article/details/103111973