最近在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通過軟連接指向新安裝的庫文件。
這個問題耽誤了我大半天,所以在此記錄一下。