“ImportError: No module named carla” 問題的解決方案

參考: https://carla.readthedocs.io/en/latest/ros_installation/#run-the-ros-bridge

問題描述

安裝了ROS bridge 後運行時出錯:

roslaunch carla_ros_bridge carla_ros_bridge.launch

顯示:ImportError: No module named carla
在這裏插入圖片描述

問題分析

程序找不到 CARLA Python的路徑。apt安裝的會自動執行此操作,但其他安裝可能會丟失此功能。(我是使用Quick start 安裝的)

問題解決

使用.egg文件(included)的完整路徑執行以下命令。使用環境Python版本支持的版本。

注意:.egg文件可以位於/PythonAPI//PythonAPI/carla/dist/中,具體取決於CARLA的安裝。

 export PYTHONPATH=$PYTHONPATH:<path/to/carla/>/PythonAPI/<your_egg_file>

我的.egg文件的位置:
在這裏插入圖片描述
我的運行環境的Python版本是2.7,所以我執行的命令是:

export PYTHONPATH=$PYTHONPATH:~/CARLA_0.9.9/PythonAPI/carla/dist/carla-0.9.9-py2.7-linux-x86_64.egg

可以通過以下命令檢查是否成功:

python -c 'import carla;print("Success")'

成功時的輸出:
在這裏插入圖片描述
可能還會出現以下問題:

  1. 報錯:ImportError: libpng16.so.16: cannot open shard object file: No such file or directory
    在這裏插入圖片描述
    解決方案:
sudo apt-get install libpng16-16
  1. 報錯:ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.11’
    這是動態庫的問題,解決方案如下:
    參考:https://blog.csdn.net/bitcarmanlee/article/details/90242598

1.檢查動態庫

cd /usr/lib/x86_64-linux-gnu
sudo strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep CXXABI

輸出結果爲:

CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_1.3.8
CXXABI_1.3.9
CXXABI_TM_1
CXXABI_FLOAT128

可以看出沒有CXXABI_1.3.11

2.查找編譯gcc時生成的最新動態庫

sudo find / -name "libstdc++.so.6*"

出來的結果:

/home/jk/anaconda3/pkgs/libstdcxx-ng-9.1.0-hdf63c60_0/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.26
/home/jk/anaconda3/pkgs/libstdcxx-ng-9.1.0-hdf63c60_0/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
/home/jk/anaconda3/pkgs/libstdcxx-ng-9.1.0-hdf63c60_0/lib/libstdc++.so.6.0.26
/home/jk/anaconda3/pkgs/libstdcxx-ng-9.1.0-hdf63c60_0/lib/libstdc++.so.6
/home/jk/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.26
/home/jk/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
/home/jk/anaconda3/lib/libstdc++.so.6.0.26
/home/jk/anaconda3/lib/libstdc++.so.6
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21-gdb.py
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
find: ‘/run/user/1000/gvfs’: Permission denied

3.將上面最新的動態庫複製到/usr/lib/x86_64-linux-gnu/,對於我來說是libstdc++.so.6.0.26

sudo cp /home/jk/anaconda3/lib/libstdc++.so.6.0.26 /usr/lib/x86_64-linux-gnu/

4.重建默認庫的軟連接
先cd 進入/usr/lib/x86_64-linux-gnu,然後刪除原來的軟連接:

cd /usr/lib/x86_64-linux-gnu &&
sudo rm -rf libstdc++.so.6

5.將軟連接指向最新的動態庫

sudo ln -s libstdc++.so.6.0.26 libstdc++.so.6

6.確認,重新檢查動態庫

sudo strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep 'CXXABI'

結果:

ibstdc++.so.6 | grep CXXABI
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_1.3.8
CXXABI_1.3.9
CXXABI_1.3.10
CXXABI_1.3.11
CXXABI_1.3.12
CXXABI_TM_1
CXXABI_FLOAT128
CXXABI_1.3
CXXABI_1.3.11
CXXABI_1.3.2
CXXABI_1.3.6
CXXABI_FLOAT128
CXXABI_1.3.12
CXXABI_1.3.9
CXXABI_1.3.1
CXXABI_1.3.5
CXXABI_1.3.8
CXXABI_1.3.4
CXXABI_TM_1
CXXABI_1.3.7
CXXABI_1.3.10
CXXABI_1.3.3

可以看出已經包含了我們所需的CXXABI_1.3.11

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