参考: 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")'
成功时的输出:
可能还会出现以下问题:
- 报错:
ImportError: libpng16.so.16: cannot open shard object file: No such file or directory
解决方案:
sudo apt-get install libpng16-16
- 报错: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
。