备忘一下mrpt编译细节
本文所用系统为Ubuntu 14.04 64位,mrpt版本为1.3.2
本文地址:http://blog.csdn.net/u013453604/article/details/51686002
参考:
Building and Installing Instructions
Compiling MRPT
在第五部分另附上64位Windows 10、Visual Studio 2015 环境下编译mrpt的说明
提醒
需要说的是如果不想自己重新编译源码而是选择直接用apt-get方式安装的话运行如下命令即可,很快就安装完了
$ sudo apt-get install mrpt-apps libmrpt-dev
mrpt1.4.0对应opencv3,所以使用opencv2的要相应下载mrpt1.3.2源码进行编译
在github可以下载历史版本,查看版本树,点开“tags”栏即可找到mrpt1.3.2版本
https://github.com/MRPT/mrpt/tree/1.3.2
$ sudo apt-get install build-essential pkg-config cmake \
libwxgtk2.8-dev libftdi-dev freeglut3-dev \
zlib1g-dev libusb-1.0-0-dev libudev-dev libfreenect-dev \
libdc1394-22-dev libavformat-dev libswscale-dev \
libassimp-dev libjpeg-dev libopencv-dev libgtest-dev \
libeigen3-dev libsuitesparse-dev libpcap-dev
注意如果上面的某些软件已经从源码编译了,请从上面移除它
新建一个空的build文件夹来存放编译生成的文件
$ cd mrpt-1.3.2
$ mkdir build
启动CMake界面
$ cd build
$ cmake ..
$ ccmake .
如果你想编译的时候生成.dbg
文件用于debug那么需要将下面CMAKE_BUILD_TYPE
参数改为Debug
,默认为空(不需要Debug的时候可以不用管这个选项)
操作:用方向键将光标下移到该选项处,按回车键进入编辑模式,然后输入Debug
再按回车确认修改即可
CMAKE_BUILD_TYPE Debug
选项改完之后按”c”配置,再按”g”在build文件夹生成Makefiles
如果上面选择了Debug,按“c”配置出现如下warning:
Warning: The debug libraries for wxWidgets couldn't be found by CMake. Please install them (libwxgtk2.8-dbg) or build in release.
安装libwxgtk2.8-dbg
之后重新按”c”配置,再按”g”生成Makefiles即可
$ sudo apt-get install libwxgtk2.8-dbg
开始编译,如果是四核CPU可以用-j
增加并行编译的任务数,-j4
表示允许四个任务并行编译,-j
后面不带数字则不限制任务数,不带-j
参数默认只是用单核心,编译时间最长,但是最稳妥
(一般并行编译任务数以CPU核心数目的两倍为宜,不宜太多,并且程序依赖关系设置不合理或过于保守会使并行编译失败)
$ make -j8
如果遇到报错(比如内存分配错误)请把-j
后面的数字改小(比如-j4
)
如果你想把mrpt可执行程序和库安装到系统中(库被拷贝到/usr/local/lib/,可执行程序被拷贝到/usr/local/bin)运行如下命令,建议执行这一步
$ sudo make install
首先说明一下环境:
64位Windows 10、Visual Studio 2015
最简的安装方式是只编译MRPT和wxWidgets,OpenCV自行安装
由于Visual Studio 2015 比较新,需要最新版本的MRPT和wxWidgets支持所以选择以下版本
wxWidgets 3.1.0 Windows 7Z (15 MB)
mrpt-1.4.0.tar.gz (20.1MB)
这两个包解压后放到D盘如下(最好不要放在C盘):
D:\wxWidgets-3.1.0
D:\mrpt-1.4.0
编译方式参考Compiling MRPT
先下载 CMake 3.6 Windows win64-x64 Installer,双击安装msi文件即可,其他下载见Get the Software
wxWidgets是MRPT里面跟界面有关的库依赖的第三方库
利用Windows10左下角的搜索框找到名为“VS2015 x64 本机工具命令提示符”的命令行工具,cd到D:\wxWidgets-3.1.0\build\msw
目录下,运行以下命令行
64位:
nmake -f makefile.vc BUILD=release SHARED=1 RUNTIME_LIBS=dynamic DEBUG_INFO=0 VENDOR=mrpt USE_OPENGL=1 TARGET_CPU=amd64
nmake -f makefile.vc BUILD=debug SHARED=1 RUNTIME_LIBS=dynamic DEBUG_INFO=1 VENDOR=mrpt USE_OPENGL=1 TARGET_CPU=amd64
如果是32位运行以下命令行:
nmake -f makefile.vc BUILD=release SHARED=1 RUNTIME_LIBS=dynamic DEBUG_INFO=0 VENDOR=mrpt USE_OPENGL=1
nmake -f makefile.vc BUILD=debug SHARED=1 RUNTIME_LIBS=dynamic DEBUG_INFO=1 VENDOR=mrpt USE_OPENGL=1
你也可以不用命令行,直接到D:\wxWidgets-3.1.0\build\msw
目录找到wx_vc14.sln
用Visual Studio 2015 打开(可供选择的有wx_vcN.sln
,N=7~14八种配置,对应不同版本的VS),把这个解决方案里面的所有项目挨个编译一遍(貌似不能一次性编译所有的项目),由于不能保证这些项目是按正确的顺序编译的,你有可能要重复多次编译。
要注意的是只有VC10以上版本的Visual Studio才能编译wxWidgets64位版本
编译完后确保D:\wxWidgets-3.1.0\build\msw
下面有类似vc_x64_mswud
、vc_mswud
这样的文件夹,里面包含各种dll文件
Windows下编译MRPT跟Ubuntu下类似,启动CMake GUI把源码路径设置为MRPT根目录,根目录下新建一个空的build文件夹作为编译目录,点configure,如果报错根据提示填写wxWidgets_ROOT_DIR的根目录路径,configure完了点generate成功了就能在build文件夹下生产一个VS解决方案,用VS打开MRPT.sln就能看到MRPT源码被加载进来。
然后选择Debug 或者 Release模式编译,如果出现
4>c1xx : error C3859: 超过了 PCH 的虚拟内存范围;请使用“-Zm89”或更大的命令行选项重新编译
4>c1xx : fatal error C1076: 编译器限制: 达到内部堆限制;使用 /Zm 指定更高的限制
这样的报错,请选择某个module右键“属性”——“C/C++”——“命令行”——“其它选项”下面查看有没有类似/Zm100 /bigobj
这样的语句,可以把它改为/Zm1000 /bigobj
,如果还是不行请挨个编译一下module(将该module设为启动项进行编译即可),只要编译前几个再重新选择ALL BUILD为启动项重新编译即可,也可以把/Zm1000 /bigobj
删除
如果编译MRPT后使用MRPT编写项目遇到类似”丢失libmrpt-base140-dbg.dll”这样的报错请将包含该动态链接库文件的目录加到环境变量path里面
我的是:
path=D:\MRPT\mrpt-1.4.0\build\bin\Debug;D:\wxWidgets-3.1.0\build\msw\vc_x64_mswud;
如果你运行MRPT的demo(比如icp-slam-live)遇上类似这样的错误:
=============== MRPT EXCEPTION =============
mrpt::utils::CImage::changeSize, line 268:
The MRPT has been compiled with MRPT_HAS_OPENCV=0 !
mrpt::utils::CImage::changeSize, line 271:
mrpt::utils::CImage::CImage, line 76:
mrpt::maps::COccupancyGridMap2D::getAs3DObject, line 191:
MapExecutor::run, line 54:
mrpt::maps::CMultiMetricMap::getAs3DObject, line 434:
MapBuilding_ICP_Live, line 519:
Press any key to continue...
那么你还是老老实实安装一下OpenCV吧,MRPT对OpenCV的依赖说明如下:
Dependency: opencv
This optional library is used for almost everything related to computer vision in MRPT. Even MRPT-specific computer vision functions or classes cannot work without OpenCV since the basic structure for holding images is OpenCV's IplImage.
If not present, the following classes will raise an exception upon usage:
mrpt::utils::CImage. Note that creating mrpt::utils::CImage objects in the "external storage mode" will not raise an exception unless you really access the image contents.
Everything needing access to an image (loading, saving, processing, etc.).
如果Windows下用.exe
文件安装OpenCV,MRPT无法找到OpenCV的库文件可以试试从源码编译一下OpenCV
Windows下编译OpenCV源码请参考:
Installation in Windows
下载源码请到OpenCV > DOWNLOADS
选择OpenCV for Linux/Mac,比如opencv-2.4.13版本
然后解压,在根目录新建空的build文件夹,然后打开CMake GUI,分别设置源码路径和build路径,“configure”再“generate”,然后会在build文件夹下生产.sln
文件,用VS2015打开这个解决方案编译它就完了,记得编译完成之后把带.dll
的目录加到path环境变量里面