『壹』 怎麼源碼編譯依賴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