問題:lapack.so

在使用maptam的calibration camera的時候發現一個問題,運:

roslaunch mcptam camera_calibrator.launch camera_name:=camera1 device:=/dev/video0

提示出錯:symbol lookup error: /usr/lib/liblapack.so.3: undefined symbol: sgetrs_N_parallel

網上的相關資料比較少,按照博主http://blog.sina.com.cn/s/blog_6594d5d30102wwx6.html 的講解,應該時多個版本的庫衝突的問題,本來想要按照指示刪除 liblapack-dev, 先刪除了 libatlas-base, 等到刪除libpack-dev的時候,提醒將會有14個軟件被卸載,不僅包括liblapack-dev, 還包括 了我的ros-kinect-desktop-full, 我之前沒看清楚就刪除了一次,這次不敢再刪,換了個思路,查蘭liblapack.so.3的鏈接文件;

cd /usr/lib
ls -lR |grep lapack

列出所有與lapack相關的軟連接,具體結果如下:

drwxr-xr-x   2 root root     4096 5月  21 13:46 lapack
lrwxrwxrwx   1 root root       29 5月  21 13:48 liblapack.a -> /etc/alternatives/liblapack.a
lrwxrwxrwx   1 root root       30 5月  21 13:48 liblapack.so -> /etc/alternatives/liblapack.so
lrwxrwxrwx   1 root root       32 5月  22 10:36 liblapack.so.3 -> /etc/alternatives/liblapack.so.3
lrwxrwxrwx   1 root root       34 5月  22 11:16 liblapack.so.3gf -> /etc/alternatives/liblapack.so.3gf
./lapack:
-rw-r--r-- 1 root root 10922022 1月  17  2016 liblapack.a
lrwxrwxrwx 1 root root       18 1月  17  2016 liblapack.so -> liblapack.so.3.6.0
lrwxrwxrwx 1 root root       18 1月  17  2016 liblapack.so.3 -> liblapack.so.3.6.0
-rw-r--r-- 1 root root  6259328 1月  17  2016 liblapack.so.3.6.0
-rw-r--r-- 1 root root 6172176 4月  19  2016 liblapack.so.3
-rw-r--r-- 1 root root 213 1月  17  2016 lapack-netlib.pc
lrwxrwxrwx 1 root root  27 5月  21 13:48 lapack.pc -> /etc/alternatives/lapack.pc
-rw-r--r-- 1 root root  14832 4月  17  2016 lapack_lite.x86_64-linux-gnu.so

這裏看到,執行roslaunch的時候調用的liblapack.so.3 庫主要指向的就是/etc/alternatives 下的liblapack.so.3

update-alternatives 時Ubuntu下專門維護系統命令連接符的工具,可以很黨鞭的設置系統默認使用那個命令,那個軟件版本,主要會用到的是

update-alternatives --install 用於增加一組新的系統命令連接符

update-alternatives --display 用於查看一個命令鏈接組的所有信息,

update-alternatives --remove 用於刪除一個alternative

update-alternatives --config  用於爲現有的命令鏈接選擇一個作爲系統默認的

由上面的軟連接查詢結果也可以看到,在 /usr/lib 下有liblapack.so.3 , 並且在 /usr/lib/lapack 下 也有liblapack.so.3 , 所以要先了解系統默認調用的究竟是那個liblapack.so.3

shinan@shinan-HP-Pavilion-Gaming-Laptop-15-cx0xxx:/etc/alternatives$ sudo update-alternatives  --config liblapack.so.3
有 2 個候選項可用於替換 liblapack.so.3 (提供 /usr/lib/liblapack.so.3)。

  選擇       路徑                                 優先級  狀態
------------------------------------------------------------
* 0            /usr/lib/openblas-base/liblapack.so.3   40        自動模式
  1            /usr/lib/lapack/liblapack.so.3          10        手動模式
  2            /usr/lib/openblas-base/liblapack.so.3   40        手動模式

要維持當前值[*]請按<回車鍵>,或者鍵入選擇的編號:1

查詢結果如上, 總共由兩種情況, * 哪行時默認的,openblas下的liblapack, 這裏做一個切換,換成1, 因爲默認的那個是我自己安裝的openblas,我不確定是否正確, 換成1之後,再次運行roslaunch, 提示如下:

symbol lookup error: /usr/lib/libblas.so.3: undefined symbol: sgemv_thread_n

這次換成libblas.so.3 出錯,也是用同樣的方法, 查看:

sudo update-alternatives  --config libblas.so.3
有 2 個候選項可用於替換 libblas.so.3 (提供 /usr/lib/libblas.so.3)。

  選擇       路徑                               優先級  狀態
------------------------------------------------------------
* 0            /usr/lib/openblas-base/libblas.so.3   40        自動模式
  1            /usr/lib/libblas/libblas.so.3         10        手動模式
  2            /usr/lib/openblas-base/libblas.so.3   40        手動模式

要維持當前值[*]請按<回車鍵>,或者鍵入選擇的編號:1

同樣將其切換成1, 在次進行roslaunch,不會再報錯。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章