GTSAM安装matlab⼯具箱遇到的神坑
半夜⼀点钟睡不着,起来开始搞这个问题,写完记录,现在已经是凌晨四点了。。不过还好,问题解决了,也有所收获!熬夜伤⾝,保重⾝体!
1、问题
问题:我第⼀次安装GTSAM的时候没有安装它的matlab⼯具箱,现在想安装matlab⼯具箱,该怎么办?
疑惑:
1⼀开始想的是重装,但是说实话,Linux下我都不知道重装时需不需要先把原来装好的卸载了?make install会覆盖掉原来装好的吗?
2会不会有⼀个选项,我单单安装它的matlab⼯具箱就⾏了,这样就可以不破坏我之前的安装了
3我能说当初⾃⼰是怎么安装GTSAM的我都忘了,只是有个印象,貌似是因为很简单就没有做记录。。可是此⼀时彼⼀时,当时觉得简单,过了这么久早都忘完了,就不觉得简单了。(最终还是在官⽹上看了安装教程,确实简单。也想提醒⼀下⾃⼰,安装什么软件,先去官⽹看,实在看不懂再在⽹上搜)
顾虑:
选择重装,万⼀重装失败,原来装好的GTSAM⽆法还原,该咋办,这不是赔了夫⼈⼜折兵吗。。。
因为中GTSAM_INSTALL_MATLAB_TOOLBOX默认为OFF,也就是不安装matlab⼯具箱,所以我⼀开始安装的版本是没有matlab⼯具箱的。后来想着⽤matlab学习gtsam更⽅便,就想重新安装⼀下。根据官⽹所说的,只需要在CMakeList中把
GTSAM_INSTALL_MATLAB_TOOLBOX设为ON就会安装matlab⼯具箱了。这么简单啊,⾛起。结果等待make install了差不多半个⼩时,还是⽼样⼦,matlab根本不能运⾏。
下载的gtsam压缩包,除了build⽂件夹是⾃⼰新建的⽤来放编译过程产⽣的⽂件,其他⽂件夹都是压缩包⾥⾃带的,它们并不是cmake make 之后⽣成的。意识到这点对我很重要,我之前⼀直以为我的gtsam就安装在了这个work⽂件夹下。
2、看《CMake实践》
然后我就趁着这个机会⼜看了《CMake实践》,知道了make install 默认安装到/usr/bin⽬录下,make install DESTDIR=/tmp/test 安装在/tmp/test/usr/bin下。install可以将任何东西都安装到指定⽬录,所以就是说我当前⼯程⽬录下的所有东西,其实都安装(有些例⼦、⽂档的安装相当于直接拷贝过去的)到了/usr/bin下。怪不得当我在根⽬录下搜索⼀个名字时,⾄少都会出现两个,⼀个在⾃⼰⼯程⽬录下,另⼀个就在系统⽬录下。
3、阅读官⽹安装说明
⽹上并没有搜索到这样问题。于是看寻解决办法。
在安装选项说明⾥,有这么两项:
CMAKE_INSTALL_PREFIX
The install folder. The default is typically /usr/local/. To configure to install to your home directory, you could execute:
cmake -DCMAKE_INSTALL_PREFIX:PATH=$HOME ..
GTSAM_TOOLBOX_INSTALL_PATH
The Matlab toolbox will be installed in a subdirectory of this folder, called 'gtsam'.
cmake -DGTSAM_TOOLBOX_INSTALL_PATH:PATH=$HOME/toolbox ..
对CMake的不熟悉令我对这些配置有着天然的恐惧,觉得这些好⿇烦,⾃⼰之前看《CMake实践》时就没搞懂这些配置的意义。(之前看了CMake实战,没有完全看懂,后来搁置,现在基本忘光了)
看到GTSAM_TOOLBOX_INSTALL_PATH,我以为需要⾃⼰指定路径不然不会⽣成toolbox⽂件夹,然
后欢天喜地地以为⾃⼰到问题所在了。然⽽并没有什么卵⽤,还是没有toolbox这个⽂件夹。
4、最终问题的解决来⾃于我⽆意间的⼀瞥。。。。
cmake命令会输出东西的,输出的信息除了Fatal error之外,其他的我从来没想着看过⽆意间想看看cmake后这些长长的输出是什么东西,就过就发现了问题,我明明都设置了GTSAM_INSTALL_MATLAB_TOOLBOX为ON,cmake输出的信息却仍然是Install
matlab toolbox :  Disabled到底是怎么回事?百思不得解。
然后⼜想了想,重新解压GTSAM压缩包,在解压后的纯净⽆污染⽂件夹⾥⾯先把GTSAM_INSTALL_MATLAB_TOOLBOX改为ON,然后输出就变为Enabled了然后为了复现问题我⼜把这⾥的ON改为OFF,发现输出还是Enabled。。。
⿇蛋⼼态炸了。涉及到知识盲区了,⾃⼰并不知道cmake⼀次之后,当需要再cmake时,如果更改了中的⼀些东西,是要删除build⽂件夹下所有⽂件的。。不然可能继续保持直线的配置??我也不知道原因,反正肯定要清空build⽂件夹。
然后make install 安装就成功了。
5、还有⼀处需要更改
在⼯程⽬录/gtsam/matlab下,有⼀个⽂件,是讲如何⽤这个matlat⼯具箱,其中有⼀点,需要删除libstdc++相关的问题
If you have a newer Ubuntu system, you must make a small modification to your
MATLAB installation, due to MATLAB being distributed with an old version of
the C++ standard library.  Delete or rename all files starting with
'libstdc++' in your MATLAB installation directory, in paths:
/
usr/local/MATLAB/[version]/sys/os/[system]/
/usr/local/MATLAB/[version]/bin/[system]/
为什么现在都用cmake
6、总结
这个故事告诉我,熟悉⼀些基本⼯具是多么的重要,对于像我这种⾮计算机出⾝的程序员们,熟悉CMake,熟悉Linux是多么的重要。也不要太担⼼,慢慢积累,现在已经⽐以前知道的多很多了。
附上CMake实践pdf,希望遇到了同样的问题或者恰好看到这篇博客的同志们可以好好看看这个教程,不长,只有47页。写的的确很好,不过要完全看懂还是要看多遍,不要妄想⼀遍就看懂学会,不可能的,知识学习都会有⼀个从⼊门到慢慢熟悉的过程,所以不要急于求成,⼀步⼀步来,这句话也是对⾃⼰说的。