matplotlib/matplotlib-cpp避坑
docker内未安装虚拟显示器或未共享宿主机显示器服务,python使用matplotlib会报错:
exception _tkinter.tclerror: ‘no display name and no $display environment variable’ in
C++使用matplotlib-cpp是会导致程序崩溃,尤其是matplotlib的save()或savefig(),使用gdb查看core文件一堆libc库问题:
0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
1 0x00007fe46be30859 in __GI_abort () at abort.c:79
2 0x00007fe46c2088d1 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
3 0x00007fe46c21437c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
4 0x00007fe46c2143e7 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6
5 0x00007fe46c214699 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6
6 0x000055847916b667 in matplotlibcpp::save (filename=”output/trajectory.png”, dpi=0) at /home/zhito/SensorX2car/pose_sensor2car/3rdparty/matplotlib-cpp/matplotlibcpp.h:2642
7 0x000055847916643f in YawCalib::LoadData (this=0x7fffeed0c970, file_path=”data/novatel_enu.csv”, start_frame=0, end_frame=2147483647) at /home/zhito/SensorX2car/pose_sensor2car/src/yawCalib.cpp:58
8 0x000055847916569c in main (argc=3, argv=0x7fffeed0cb38) at /home/zhito/SensorX2car/pose_sensor2car/src/run_imu2car.cpp:45
ubuntu系统一般自带X11服务器,安装X11服务器:sudo apt-get install x11-xserver-utils
打开X11服务器权限:xhost +
设置宿主机环境变量export DISPLAY=:0
进入容器时添加环境变量共享与网络共享:docker run -it -e DISPLAY=$DISPLAY –net=host dockername