最近在Nvidia的PX2板子上安装Autoware,按照Autoware.ai的source build步骤进行环境配置、下载代码并进行编译。编译过程中遇到了下面的问题:
--- stderr: kitti_player
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmCloseOnce'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmMap'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmUnmap'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmGetDevices2'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmFreeDevice'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmGetDeviceNameFromFd2'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmOpenOnce'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmGetDevice2'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmFreeDevices'
collect2: error: ld returned 1 exit status
make[2]: *** [devel/lib/kitti_player/kitti_player] Error 1
make[1]: *** [CMakeFiles/kitti_player.dir/all] Error 2
make: *** [all] Error 2
网上搜了一圈,别人也遇到了,但是解决办法是把这里提到的libGL.so换成对/usr/lib/gcc/aarch64-linux-gnu/Tegra/libGL.so文件的软链接。可是我的环境中看了下/usr/lib/gcc/aarch64-linux-gnu/下并没有Tegra,所以不能直接这么操作。肯定是少装东西了。
后来在Nvidia开发者论坛中找到了解决办法,No /usr/lib/aarch64-linux-gnu/tegra/libGL.so.0 with Jetpack 4.4.1正是此问题。
解决方法如下:
1.从github中https://github.com/NVIDIA/libglvnd路径下载libglvnd。
按照其中的readme进行编译,最后执行sudo make install进行安装。
2.对出错的库文件进行更新(软连接指向新安装的库文件)
安装后,会在/usr/local/lib/下出现libGL.so库文件,此时进入/usr/lib/gcc/aarch64-linux-gnu/目录,执行一下操作:
sudo rm libGL.so
sudo ln -s /usr/local/lib/libGL.so libGL.so
这样,相当于重新安装了对应的库,并把/usr/lib/gcc/aarch64-linux-gnu/下的libGL.so通过软连接指向新安装的库文件。
另外,在编译过程中碰到的另一个问题报错如下:
c++: internal compiler error: Killed (program cc1plus)
经过排查是板子内存空间不够导致的。由此,可以看出Autoware编译过程中还是很耗费内存的。
删除了一些文件腾出空间后继续编译,编译ok了。
这两个问题耽误了我大半天,所以在此记录一下。