‘壹’ 怎么源码编译依赖LAPACK和ATLAS库的NumPy包
1. GCC版本要求
使用较新版本的GCC工具集(尽量不低于v4.7)且集成有gfortran编译器。
备注1:这里大写的"GCC"是指GNU Compiler Collection,它除包含C语言编译器gcc外,还包含很多其它语言的编译器(如g++/gfortran等)
备注2:3.x版的的C语言编译器gcc会由于某些头文件缺失导致编译atlas库报错
备注3:若GCC工具集中没有gfortran编译器,则编译lapack库时会遇到一些莫名其妙的错误(因为lapack是用fortran编写的),好在GCC4.7及以上版本中已经集成了gfortran编译器
在GCC版本符合要求的前提下,临时将其加入环境变量PATH并设置动态库查找路径:
[plain] view plain
在CODE上查看代码片派生到我的代码片
$ export PATH=/home/slvher/tools/gcc48/bin/:$PATH
$ export LD_LIBRARY_PATH=/home/slvher/tools/gcc48/lib64:/home/slvher/tools/gcc48/lib
备注4:在当前shell会话中临时设置LD_LIBRARY_PATH可以保证编译过程中正确搜索到GCC库,但最好不要设置到.bash_profile中,因为那样会影响其它程序的查找路径,可能会踩到坑。
备注5:这里提到的GCC的版本要求及环境变量设置如果没有出差错,那么下面的编译会比较顺利,否则会遇到各种编译/链接问题,后续我会用一篇笔记来记录这些踩坑的过程及遇到这些诡异问题时的分析思路,这里不赘述。
2. 编译LAPACK和ATLAS库
lapack是用fortran开发的经过特别优化的线性代数计算库;atlas也是一个优化过的线性代数计算库,它提供了BLAS库的全部API(包括C接口和Fortran接口),还实现了lapack库中的部分函数,atlas在编译过程中会根据机器的配置参数来调整科学计算函数的参数,以便在该机器上达到更好的计算性能。
初看起来,需要分别编译lapack和atlas两个库,所幸的是,atlas库支持编译时自动编译lapack库,因此,只需正确完成atlas库的编译配置,编译atlas库就可以了。
下面是编译atlas/lapack库的主要步骤。
1) 分别从官网下载lapack源码包和atlas源码包,我下载的是目前的最新版lapack-3.5.0.tgz及atlas3.10.2.tar.bz2
2) 解压atlas源码压缩包:tar -jxvf atlas3.10.2.tar.bz2
3) cd ATLAS && mkdir BLDdir && cd BLDdir
4) 执行configure命令以配置编译参数
[plain] view plain
在CODE上查看代码片派生到我的代码片
$ ../configure --shared -b 64 --prefix=/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs --with-netlib-lapack-tarfile=/home/slvher/tools/scikit-learn-virtualenv/dep-libs/lapack-3.5.0.tgz
其中,--shared表明要编译atlas共享库(configure会自动在编译命令中插入"-fPIC"参数,无需在这里显式指定);--prefix指定编译结果的安装路径;--with-netlib-lapack-tarfile表明编译atlas库时会用相同的编译器及编译/链接参数自动编译lapack库,这里指定lapack源码包的路径后,configure运行后会自动解压lapack源码并将其拷贝至BLDdir/src/lapack/reference/这个目录下。
5) configure运行完后,BLDdir目录下生成了Make.inc文件,该文件中设置了众多编译参数(如查找路径、编译产出路径、编译器、传给编译器的参数,等等),BLDdir子目录下很多模块的Makefile都会include这个Make.inc,包括源码独立的lapack包,可见,这个Make.inc文件可以达到统一编译环境的目的。
6) make build
7) make check
8) make ptcheck
9) make install
如果上述一系列命令均执行成功,那么编译完成的*.a和*.so库会安装到--prefix参数指定的路径下,这些库的头文件也会被拷贝到安装路径下的include目录。
至此,ATLAS和LAPACK库均完成编译,其中LAPACK库是.a静态库,ATLAS库是.so动态库。事实上,ATLAS的动态库中已经包含了LAPACK静态库的所有符号和代码。
下面可以开始编译依赖LAPACK和ATLAS库的NumPy包了。
3. 编译优化版NumPy包
前提:官网下载NumPy源码包并解压,这里以目前最新版numpy-1.9.2.tar.gz为例进行说明。
1) cd至解压目录numpy-1.9.2
2) cp site.cfg.example site.cfg
3) 在site.cfg中配置atlas项,其中include_dirs和library_dirs是atlas库安装路径下的include和lib目录
[plain] view plain
在CODE上查看代码片派生到我的代码片
[atlas]
atlas_libs = lapack,f77blas,cblas,atlas
library_dirs = /home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/lib
include_dirs = /home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/include
4) python setup.py config
5) python setup.py build --fcompiler=gnu95 ## 指定Fortran编译器为GCC4.8工具集中的gfortran
6) python setup.py install
正常情况下,build成功后,install会把编译产出拷贝到当前python解释器安装路径下的lib/python2.7/site-packages目录中。
此时,可以通过下面的例子来查看NumPy包的配置情况:
[python] view plain
在CODE上查看代码片派生到我的代码片
>>>importnumpyasnp
>>>np.__config__.show()
atlas_3_10_blas_threads_info:
libraries=['lapack','f77blas','cblas','atlas']
library_dirs=['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/lib']
define_macros=[('HAVE_CBLAS',None),('ATLAS_INFO','"\"3.10.2\""')]
language=c
include_dirs=['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/include']
lapack_opt_info:
libraries=['tatlas','lapack','f77blas','cblas','atlas']
library_dirs=['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/lib']
define_macros=[('ATLAS_INFO','"\"3.10.2\""')]
language=f77
include_dirs=['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/include']
blas_opt_info:
libraries=['lapack','f77blas','cblas','atlas']
library_dirs=['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/lib']
define_macros=[('HAVE_CBLAS',None),('ATLAS_INFO','"\"3.10.2\""')]
language=c
include_dirs=['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/include']
openblas_info:
NOTAVAILABLE
openblas_lapack_info:
NOTAVAILABLE
atlas_3_10_threads_info:
libraries=['tatlas','lapack','f77blas','cblas','atlas']
library_dirs=['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/lib']
define_macros=[('ATLAS_INFO','"\"3.10.2\""')]
language=f77
include_dirs=['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/include']
lapack_mkl_info:
NOTAVAILABLE
blas_mkl_info:
NOTAVAILABLE
mkl_info:
NOTAVAILABLE
也可以用具体的例子来验证其功能是否正常:
[python]viewplain
在CODE上查看代码片派生到我的代码片
>>>importnumpyasnp
>>>np.arange(15).reshape(3,5)
array([[0,1,2,3,4],
[5,6,7,8,9],
[10,11,12,13,14]])
>>>
>>>a=np.arange(15).reshape(3,5)
>>>a
array([[0,1,2,3,4],
[5,6,7,8,9],
[10,11,12,13,14]])
>>>type(a)
<type'numpy.ndarray'>
>>>
>>>
>>>fromnumpy.linalgimport*
>>>b=np.array([[1.0,2.0],[3.0,4.0]])
>>>b
array([[1.,2.],
[3.,4.]])
>>>b.transpose()
array([[1.,3.],
[2.,4.]])
>>>inv(b)
array([[-2.,1.],
[1.5,-0.5]])
>>>
‘贰’ 如何运行cartographer-master
0.安装所有依赖项
sudoapt-getinstall-ygoogle-mocklibboost-all-devlibeigen3-devlibgflags-devlibgoogle-glog-devliblua5.2-devlibprotobuf-devlibsuitesparse-devlibwebp-devninja-buildprotobuf-compilerPython-sphinxros-indigo-tf2-eigenlibatlas-base-devlibsuitesparse-devliblapack-dev
1.首先安装ceressolver,选择的版本是1.11,路径随意
Gitclonehttps://github.com/hitcm/ceres-solver-1.11.0.git
cdceres-solver-1.11.0/build
cmake..
make–j
sudomakeinstall
2.然后安装cartographer,路径随意
gitclonehttps://github.com/hitcm/cartographer.git
cdcartographer/build
cmake..-GNinja
ninja
ninjatest
sudoninjainstall
3.安装cartographer_ros。
谷歌官方提供的安装方法比较繁琐,我对原来的文件进行了少许的修改,核心代码不变,只是修改了编译文件
下载到catkin_ws下面的src文件夹下面
gitclonehttps://github.com/hitcm/cartographer_ros.git
然后到catkin_ws下面运行catkin_make即可。
4.数据下载测试
2d数据,大概500M,用迅雷下载
https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
3d数据,8G左右,同样用迅雷下载
https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/cartographer_3d_deutsches_museum.bag
然后运行launch文件即可。
roslaunchcartographer_rosdemo_backpack_2d.launchbag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
roslaunchcartographer_rosdemo_backpack_3d.launchbag_filename:=${HOME}/Downloads/cartographer_3d_deutsches_museum.bag
如下图,左侧为2d,右侧为3d。
‘叁’ win系统安装scipy失败问题,提示没有BLAS的原因是什么
第1步 下载NumPy的SUPERPACK安装 numpy的-1.3.0rc2-win32的-SUPERPACK-python2.6.exe (直接下载网址,4782592字节)。运行此安装程序 导致“无法安装。的Python 2.6版要求,这是不是在注册表中找到“。 更新:有一个实际的安装程序的NumPy的作品-看问题的开端。
第2步 试图以另一种方式安装numpy的。下载的zip 包numpy的 CodeGo.net,1.3.0rc2.zip(直接下载网址,2404011字节), 提取在一个正常的方式将zip文件到一个临时 目录D:\\ temp7 \\ numpy的-1.3.0rc2(其中setup.py和 的README.txt是)。然后我打开行窗口,然后:d:
cd D:\temp7\numpy-1.3.0rc2
setup.py install
这跑了很久也和cl.exe时 (Visual Studio的一部分)。这里是一个近5000行代码 成绩单(230 KB)。 这个工作。现在我可以做到这一点在Python:import numpy as np
np.random.random(10)
这个结果:array([ 0.35667511, 0.56099423, 0.38423629, 0.09733172, 0.81560421,
0.18813222, 0.10566666, 0.84968066, 0.79472597, 0.30997724])
第3步 下载SciPy的SUPERPACK安装程序,SciPy的-0.7.1rc3- Win32的SUPERPACK-python2.6.exe(直接下载网址,45597175 个字节)。运行此安装程序造成 在上市之初 第4步 试图以另一种方式安装SciPy的。下载的zip 包SciPy的-0.7.1rc3.zip(直接下载网址,5506562 字节),将该zip文件解压在一个正常的方式来一个 临时目录D:\\ temp7 \\ SciPy的-0.7.1(其中setup.py 和的README.txt是)。然后我打开行窗口,然后:d:
cd D:\temp7\scipy-0.7.1
setup.py install
这并没有取得多大-这里是一个成绩单(约95 线)。 它失败:>>> import scipy as sp2
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
ImportError: No mole named scipy
平台:Python的2.6.2安装在目录D:\\ Python262, Windows XP的64位SP2,8 GB的RAM,Visual Studio 2008中 专业版安装。 在安装了Python的启动画面是:Python 2.6.2 (r262:71605, Apr 14 2009, 22:46:50) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "right", "credits" or "license" for more information.
>>>
PATH的值,导致设置行窗口:Path=D:\Perl64\site\bin;D:\Perl64\bin;C:\Program Files (x86)\PC Connectivity Solution\;D:\Perl\site\bin;D:\Perl\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;d:\Program Files (x86)\WinSCP\;D:\MassLynx\;D:\Program Files (x86)\Analyst\bin;d:\Python262;d:\Python262\Scripts;D:\Program Files (x86)\TortoiseSVN\bin;D:\Program Files\TortoiseSVN\bin;C:\WINDOWS\system32\WindowsPowerShell\v1.0;D:\Program Files (x86)\IDM Computer Solutions\UltraEdit\
1. 我还没有尝试过,但你可能要下载此版本可移植的Python。它与Python的2.5.4运行SciPy的-0.7.0b1。
2. 可在非官方的64位安装程序的numpy的和SciPy的
3. 简短的回答:窗64的支持,今天仍然是进展中的工作的SUPERPACK肯定不会在64位python工作(但它应该能正常运行在32位的python,即使在Windows 64)。 与Windows 64的主要问题是,建设使用MinGW-W64是不是稳定在这一点:它可能是我们的(numpy的开发者)的故障,python的过错或MinGW的-W64。最有可能的所有这些:)的。所以,你有什么比崩溃numpy的随机等;为IFORT是一个从今天起 CodeGo.net,无论numpy的和SciPy的源代码,可以与VS 2008和IFORT(所有测试通过),但建设它仍然是一个相当痛苦,并不能很好通过numpy的构建基础设施的支持。
4. 由于成绩单为SciPy的告诉你,SciPy的是不是真的应该工作在Win64的:Warning: Windows 64 bits support is experimental, and only available for
testing. You are advised not to use it for proction.
所以我建议安装32位版本的Python,并停止试图建立SciPy的自己。如果您仍然想尝试,无论如何,你首先需要BLAS与LAPACK,作为PiotrLegnica说。看到成绩单的地方一直在寻找这些库的版本的地方。
5. Enthought有一个Python发行,其中包括SciPy的,但是,它不是free的。警告:我有它。
6. WinPython是一个开放源码的分布,有64位numpy的和SciPy的。
7. 另一种方法: free的,包括大量的顺利合作。 这个人说: 你有没有尝试linux.pythonxy? ()。 这是64位的准备... 虽然我不太清楚
8. 尝试在你的2.6.2安装Python 2.6.3(这也应该加上正确的注册表项),或注册您现有的这个脚本。安装人员应经过这项工作。 结构SciPy的要求和图书馆-BLAS与LAPACK。
9. 我是一个32位的机器上得到这个错误。我固定它通过注册我的Python安装,使用脚本在: 这有可能是脚本也会使64位SUPERPACK安装工作。
10. 安装Python分布 下载并安装pythonPython的分布。 让pythonPython发布链接py3.3,如果你想numpy的,SciPy的或Matplotlib在py3.3工作或它像有只py2.7以上函数。 下面的链接提供了更多的细节python